| 这是冒泡法的程序: #include void sort(int array[],int size) { int i,j,temp; /*下面是利用相邻的比较,把大的数放到上面;*/ for(i=0;i for(j=i+1;j if(array[i]>array[j]) { temp=array[i]; array[i]=array[j]; array[j]=temp; } } void main() { int i; int a[10]={1,33,78,34,787,213,132,35,32,21}; sort(a,10); for(i=0;i<10;i++) printf(%6d,a[i]); } 这是选择法的程序: #include void sort(int array[],int size) { int i,j,k,temp; for(i=0;i { k=i; /*把最小的那一个数找出来,并且用a[k]记下来,然后与a[i]交换;*/ for(j=i+1;j if(array[k]>array[j]) k=j; temp=array[k]; array[k]=array[i]; array[i]=temp; } } void main() { int a[]={12,43,54,23,32,65,87,2,34,54}; int i; sort(a,10); for(i=0;i<10;i++) printf(%dt,a[i]); } 这是一个快速排序的程序: #include void quick_sort(int array[],int first,int last)//first,last分别为数组下标的范围; { int temp,low,high,list_separator; low=first; high=last; /*下面是比较数组中的大小,把数组中的数与中间数比较,大的放在后半部分,比中间数小的放在前半部分,*/ list_separator=array[(first+last)/2];//中间数; do{ while(array[low] low++; while(array[high]>list_separator)// 中间数与后半部分比较; high--; if(low<=high)//前半部分与后半部分交换; { temp=array[low]; array[low++]=array[high]; array[high--]=temp; } }while(low<=high); if(first quick_sort(array,first,high);//利用递归的办法,实行循环; if(low quick_sort(array,low,last);//利用递归的办法,实行循环; } void main() { int a[9]={12,23,34,65,93,32,21,9,8}; quick_sort(a,0,8); for(int i=0;i<9;i++) printf(%dt,a[i]); printf(n); } 这是一个希尔排序的程序: #include void shell_sort(int array[],int size) { int temp,gap,i,flag; gap=size/2; do{ do{ flag=0;/*利用标记,使前半部分与后半部分的数都对应比较过,前半部分大于后半部分的交换,直到都比较过,并且前半部分的数小于与前部分一一对应的后部分的数时,退出while循环*/ for(i=0;i if(array[i]>array[i+gap]) { temp=array[i]; array[i]=array[i+gap]; array[i+gap]=temp; flag=1; } }while(flag); }while(gap=gap/2); } void main() { int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i; shell_sort(array,15); for(i=0;i<15;i++) printf(%10d,array[i]); } |
C语言 ( 粤ICP备11042647号-2 )
GMT+8, 2012-2-6 14:43
©2009-2011 cyuyan.com.cn