算法复习2-3种初级排序
来源:互联网 发布:c语言获取当前时间 编辑:程序博客网 时间:2024/05/16 09:24
1.选择排序:首先找到数组中最小的那个元素,其次将它和数组第一个元素交换位置,再次,在剩下的元素中寻找最小的元素,将它与数组第二个元素交换。直到整个数组排序完毕。
public void Selection(int[] a){ int N=a.length(); for(int i=0;i<N;i++) { int min=i; for(int j=i+1;j<N;j++) { if(less(a[j],a[min])) min=j;{ exch(a,i,min);}}public bool less(int a,int b){if(a<b)return true;elsereturn false;}public void exch(int[] a,x,y){ int temp=0; temp=a[x]; a[x]=a[y]; a[y]=temp;}
2.插入排序:从数组的开头开始,依次比较现有值与它前一位值的大小,然后进行交换,这样到数组尾执行完交换后,数组就排序完毕了。
public void Insertion(int [] a){ int N=a.length(); for(int i=0;i<N;i++){ for(int j=i;j>0&&if(less(a[j],a[j-1]);j--) exch(a,j,j-1);}}public bool less(int a,int b){if(a<b)return true;elsereturn false;}public void exch(int[] a,x,y){ int temp=0; temp=a[x]; a[x]=a[y]; a[y]=temp;}
3.希尔排序:希尔排序是插入排序的升级版,因为大规模的插入排序效率很低,他只能一次次地让更小的元素向前移动,希尔排序为了加快速度,采用了交换不相邻元素以对数组进行局部排序。并最终用插入排序将局部有序的数组排序。主要思想是使得数组中间隔为h的元素都是有序的,成为h有序数组,用插入排序对h个子数组进行排序,让h每次排序之后不断缩小再进行排序,当h为1时,数组有序。
public void Shell(int[] a){ int N=a.length; int h=1; while(h<N/3) h=3*h+1;//+1保证最后h变为1 while(h>=1){ for(int i=h;i<N;i++) for(int j=i;j>=h&&less(a[j],a[j-h]);j-=h) exch(a,j,j-h); h=h/3;}public bool less(int a,int b){if(a<b)return true;elsereturn false;}public void exch(int[] a,x,y){ int temp=0; temp=a[x]; a[x]=a[y]; a[y]=temp;}
0 0
- 算法复习2-3种初级排序
- 算法复习-3种较高级排序
- 排序算法复习(2)-- 选择排序
- 初级排序算法实现
- 初级排序算法总结
- 初级排序算法
- 排序算法之初级排序
- 排序算法之初级排序
- (算法)初级排序算法
- 几种常用排序算法的复习
- 老老实实复习算法: 3 合并排序
- 算法导论复习(3) 堆排序
- 老老实实复习算法: 2 冒泡排序
- 算法复习之:N^2排序
- 算法复习(2) 快速排序
- 算法导论复习(2) 归并排序
- 快速排序算法复习
- 排序算法复习
- C++类的自动转换和强制转换详解和实现
- 部分数据前台显示为null
- #ifdef,#else,#endif,#if用法详解
- poj 1276 多重背包+二进制
- git rebase
- 算法复习2-3种初级排序
- 通信录列表+复杂Adapter分析
- IOS TextField 输入银行卡号格式化(每四位中间空一格)
- python下spark_RDD认识与操作
- hdfs 查看文件分布所属块
- 基于Qt4.7的ADC测试程序
- Android学习之解决多个Fragment切换时重新实例化的问题
- leetcode52 N-Queens II
- bzoj1412[狼和羊的故事]最小割