//插入排序:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。 void insertSort(int a[],int len){ int temp; for (int i=1; i<len; i++) { for (int j=0; j<i; j++) { if (a[j]>a[i]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } for (int i=0; i<len; i++) { printf("%d ",a[i]); } } int main(){ int a[]={3,4,1,11,5,2,6,566,22,43}; int len=sizeof(a)/sizeof(int); ascSort(a,len); return 0; } 二、选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 void selectSort(int a[],int len){ int temp; for (int i=0; i<len-1; i++) { for (int j=i+1; j<len; j++) { if (a[i]>a[j]){ temp=a[i]; a[i]=a[j]; a[j]=temp; } } } for (int i=0; i<len; i++) { printf("%d ",a[i]); } } //三、冒泡排序:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。 void bubbleSort(int a[],int len){ int temp; for (int i=0; i<len; i++) { for (int j=0; j<len-1-i; j++) { if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (int i=0; i<len; i++) { printf("%d ",a[i]); } } //四、快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快a速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 //快速排序 void fastSort(int a[],int len){ int i=0; int j=len-1; int val=a[0];//指定参考值val大小a if(len>1)//确保数组长度至少为2,否则无需排序 { while(i<j)//循环结束条件 { for(;j>i;j--)//从后向前搜索比val小的元素,找到后填到a[i]中并跳出循环 if(a[j]<val) { a[i]=a[j]; break; } for(;i<j;i++)//从前往后搜索比val大的元素,找到后填到a[j]中并跳出循环 if(a[i]>val) { a[j]=a[i]; break; } } a[i]=val;//将保存在val中的数放到a[i]中 fastSort(a,i);//递归,对前i个数排序 fastSort(a+i+1,len-1-i);//对i+1到len这len-1-i个数排序 } } int main(){ int a[]={3,4,1,11,5,2,6,566,22,43}; int len=sizeof(a)/sizeof(int); fastSort(a,len); for (int i=0; i<len; i++) { printf("%d ",a[i]); } return 0; } 求数组的平均值、最大值。 void maxAndAvg(int a[],int *max,float *avg){ float sum; *max=a[0]; for (int i=0; i<8; i++) { if (*max<a[i]) { *max=a[i]; } *avg+=a[i]; } *avg=*avg/8; // int a[]={3,4,1,3,5,2,6,566}; // int max; // float avg; // maxAndAvg(a,&max,&avg); // printf("%d,%f",max,avg); }
C排序算法
最新推荐文章于 2024-03-19 18:54:52 发布