C语言实现六种排序算法
来源:互联网 发布:恶意百度点击软件 编辑:程序博客网 时间:2024/06/08 04:33
C语言实现六种排序算法
- C语言实现六种排序算法
- 冒泡排序
- 插入排序
- 归并排序
- 快速排序
- 希尔排序
- 选择排序
下载完整源代码
Java语言版点此穿越
冒泡排序
从左到右依次比较相邻两个元素,如果大的在左边则交换这两个元素。
如果在依次遍历中执行过交换操作,则再次遍历,直到不发生元素交换。
int * sortByMaopao(int * num,int length){ bool flag=true; while(flag==true) { flag=false; for(int i=0;i<length-1;i++) { if(num[i]>num[i+1]) { num[i]=num[i]+num[i+1]-(num[i+1]=num[i]); flag=true; } } } return num;}
插入排序
从左到右遍历每个元素,遍历到的元素作为待定元素。
待定元素与其左边的元素逐个相比,如果左边大则交换,如果右边大则遍历下一个待定元素。
int * sortByCharu(int * num,int length){ for(int i=1;i<length;i++) { for(int j=i;j>0;j--) { if(num[j-1]>num[j]) { num[j]=num[j]+num[j-1]-(num[j-1]=num[j]); } } } return num;}
归并排序
如果被排序数组长度大于2,将要排序的数组从中间分为左右两组,分别递归执行归并排序,然后将排序后的两组有序数组进行排序合并。
如果被排序数组长度不大于2,则直接进行排序。
int * sortByGuibing(int * num,int length){ sort_guibing(num,0,length-1); return num;}int * sort_guibing(int * num, int start,int end){ int mid=(start+end)/2; if(end-start>1){ sort_guibing(num,start,mid); sort_guibing(num,mid+1,end); } compare_guibing(num,start,mid,mid+1,end); return num;}int * compare_guibing(int *num,int start1,int end1,int start2,int end2){ int * temp=(int *)malloc(sizeof(int)*(end2+1)); for(int index=start1;index<=end2;index++) { temp[index]=num[index]; } int i=start1,j=start2,point=start1; while(i<=end1&&j<=end2) { if(temp[i]<=temp[j]){ num[point]=temp[i]; point++; i++; }else { num[point]=temp[j]; point++; j++; } } while(i<=end1) { num[point]=temp[i]; point++; i++; } while(j<=end2) { num[point]=temp[j]; point++; j++; } return num;}
快速排序
假设最左边元素作为核心元素。
从最右边遍历数组与核心元素相比,遇到比其小的则交换位置并终止遍历,或者直到遍历到核心元素终止遍历。
再从核心元素原位置向右进行遍历,遇到比其大的则交换位置并终止遍历,或者直到遍历到核心元素终止遍历。
重复上面两句直到遍历完整个数组,此时核心元素的位置已经确定。
对核心元素左边的数组递归执行快速排序,对核心元素右边的数组递归执行快速排序。
int * sortByKuaisu(int * num,int length){ sort_kuaisu(num,0,length-1); return num;}int * sort_kuaisu(int * num,int start,int end){ int mid=compare_kuaisu(num,start,end); if(start<end){ sort_kuaisu(num,start,mid-1); sort_kuaisu(num,mid+1,end); } return num;}int compare_kuaisu(int * num,int start,int end){ int result=start; while(start<end) { while(end>start) { if(num[end]<num[start]) { num[start]=num[start]+num[end]-(num[end]=num[start]); result=end; start++; break; } end--; } while(start<end) { if(num[start]>num[end]) { num[start]=num[start]+num[end]-(num[end]=num[start]); result=start; end--; break; } start++; } } return result;}
希尔排序
定义数组长度为偏移量。
如果偏移量比大于等于1则将偏移量除以2。
从偏移量位置向右遍历数组,将遍历到的元素与其左边相差偏移量个单位的元素进行比较,如果左边的小则交换后继续与左边相差偏移量个单位的元素比较。
遍历完成后偏移量折半,重复上一句。
int * sortByXier(int * num,int length){ int mid=length; while(mid>=1) { mid/=2; for(int i=mid;i<length;i++) { int point = i; while(point-mid>=0&&num[point]<num[point-mid]) { num[point]=num[point]+num[point-mid]-(num[point-mid]=num[point]); point-=mid; } } } return num;}
选择排序
从左向右遍历数组,每个元素与其右边的所有元素相比,最小的放在所遍历的位置。
int * sortByXuanze(int *num,int length){ for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if(num[j]<num[i]) { num[i]=num[i]+num[j]-(num[j]=num[i]); } } } return num;}
Java语言版点此穿越
0 0
- C语言实现六种排序算法
- Java语言实现六种排序算法
- c语言实现几种排序算法
- 排序算法(C语言实现)
- C语言排序算法实现
- 排序算法--C语言实现
- C语言------排序算法------归并排序(六)
- C语言实现排序算法---希尔排序
- c语言实现几种排序算法OC实现
- 几种常用排序算法的C语言实现
- C语言实现几种常见排序算法
- 几种常见排序算法的c语言实现
- 几种常用排序算法的C语言实现
- 几种常见排序算法的C语言实现
- 几种排序算法的C语言实现
- 三种排序算法的 C 语言实现
- 几种C语言实现的排序算法
- 几种常见排序算法的c语言实现
- JavaScript Date
- 天才小毒妃 > 第920章 被金执事威胁
- Java web工作原理
- 明月黄沙忆红颜
- libuv学习笔记(23)
- C语言实现六种排序算法
- 交叉编译环境
- html
- js,jquery常用方法
- Sum of Two Integers
- 贩妖记 > 第七十七章,冲入妖族村落
- 开发环境
- 架构实战-学习笔记
- 求逆元