几种常见的排序C实现
发布时间:2020-12-16 07:46:59 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #includestdio.h#includestdlib.h//冒泡排序从小到大 第一趟得到最大的存到数组的最后,第二趟得到数组的第二大的,存到数组的倒数第二位。依次。。vo
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #include<stdio.h> #include<stdlib.h> //冒泡排序从小到大 第一趟得到最大的存到数组的最后,第二趟得到数组的第二大的,存到数组的倒数第二位。依次。。 void bubble_sort(int *p){ int length=6 ; for(int i=0;i<length;i++){ for(int j=0;j<length-i;j++){ if(p[j]>p[j+1]){ int t; t=p[j]; p[j]=p[j+1]; p[j+1]=t; } } } //打印输出 for(int i=0;i<length;i++){ printf("%dn",p[i]); } } //希尔排序 void shell(int * p){ int length=6; //取增量 int step=length/2; while(step>=1){ //无序序列 for(int i=step;i<length;i++){ int temp=p[i]; int j; //有序序列 for(j=i-step;j>=0 && temp<p[j];j=j-step){ p[j+step]=p[j]; } p[j+step]=temp; } step=step/2; } } //选择排序(选择出最小的假定第一个为最小的 然后判断 是否交换) void selection_sort(int *p){ int length=6; int min,j,i,t; for(i=0; i<length;i++){ for(min=i,j=i+1;j<length;j++){ if(p[min]>p[j]){ min=j; } } if(min!=i){ t=p[i]; p[i]=p[min]; p[min]=t; } } //打印输出 for(int i=0;i<length;i++){ printf("%dn",p[i]); } } //确定第一个数组元素的最终位置 int find_pos(int *a,int low,int high){ int val=a[low]; while(low<high){ while(low<high && a[high]>=val) --high; a[low]=a[high]; while(low<high && a[low]<=val) ++low; a[high]=val; } a[low]=val; return low; } //快速排序 递归调用 void quick_sort(int *a,int high){ int pos; if(low<high){ pos=find_pos(a,low,high); quick_sort(a,pos-1); quick_sort(a,pos+1,high); } } //数组的两两合并操作,归并操作 void merge(int *p,int *temp,int left,int middle,int right){ //左指针尾 int leftend=middle-1; //右指针头 int rightstart=middle; //临时数组的下标 int tempindex=left; //数组合并后的长度 int templength=right-left+1; //先循环两个区间段都没有结束的情况 while((left<=leftend)&&(rightstart<=right)){ //r如果发现有序列小的,则将此数放入临时数组 if(p[left]<p[rightstart]){ temp[tempindex++]=p[left++]; }else{ temp[tempindex++]=p[rightstart++]; } } //判断左边序列是否结束 while(left<=leftend){ temp[tempindex++]=p[left++]; } //判断右边序列是否结束 while(rightstart<=right){ temp[tempindex++]=p[rightstart++]; } //交换数据 for(int i=0; i<templength;i++){ p[right]=temp[right]; right--; } } //归并排序 ---数组的划分 void merge_sort(int *p,int right){ if(left<right){ //取分割位置 int middle=(left+middle)/2; //递归划分数组左序列 merge_sort(p,temp,left,middle); //递归划分数组右序列 merge_sort(p,middle+1,right); //数组的合并操作 merge(p,right); } } //插入排序 void insert_sort(int *a){ int len=6; int i,temp; for(i = 1; i < len; i ++) { temp = a[i]; for(j = i - 1; j >= 0; j --) { if(a[j] > temp) { a[j + 1] = a[j]; }else { break; } } a[j + 1] = temp; } } int main(int argc,char* argv[]) { int a; int b[]={35,67,23,12,65,99}; //bubble_sort(b); //selection_sort(b); //quick_sort(b,5); shell(b); //insert_sort(b); for(int i=0;i<6;i++){ printf("%dn",b[i]); } scanf("%a",&a); return 0; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |