算法复习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
原创粉丝点击