排序算法

来源:互联网 发布:淘宝优惠券群是真的吗 编辑:程序博客网 时间:2024/05/18 15:25

一 插入排序

   1、直接插入排序

        a、基本思想:将序列分成两部分,左边按关键字有序,右边无序,初始时,将最左边的第一个关键字作为左边有序部分。将右边第一个记录插入到左边序列中的适当位置,使得左边部分依然有序,这样左边长度加一,右边减一,如此继续下去,知道右边长度为0,这时,这个序列就变成有序序列了。

       b、算法如下:

         

void Direct_Insert_Sort(int R[],int n){       for(int i=2; i<n; i++){   if(R[i]<R[i-1]){        R[0]=R[i];
         int j;    for(j=i-1;R[0]<R[j],j--){    R[j+1]=R[j];   }     R[j+1]=R[0];  }}

 2、 二分插入排序

         a、基本思想:在直接插入排序的基础上,及左边有序的基础上,采用二分法查找插入的位置。

         b、算法如下:

void Binary_Insert_Sort(int R[],int n){   for(int i =2;i<n;i++){   R[0]=R[i];   int low=1;   int high=i-1;while(low<high){mid=(low+high)/2;if(R[0]>R[mid])low =mid+1;else high=mid-1;}for(int j=i-1;j>high+1;j--)    R[j+1]=R[j];R[high+1]=R[0];}}

3、希尔排序

  a、基本思想:将一个序列分成几个小序列,将这些小序列排序好,在对较长的序列进行排序。

  b、算法如下:

void Shell_Insert_Sort(int R[],int n;int d[],int t){           for(k=0;k<t;k++){   dk =d[k];for(int i = dk;i<n;i++){  if(R[i]<R[i-dk]){R[0]=R[i]for(j=i-dk;j>0&&R[0]<R[j];j=j-dk)R[j+dk]=R[j];R[j+dk]=R[0];}}}}

二 交换排序

    1、冒泡排序

    a、基本思想:(升序排列)从序列最左边开始比较第一个记录与第二个的大小,并且根据比较结果确定是否交换,继续比较第三个与第二个记录的关键字,并且根据结果确定是否交换,一直进行到第n-i和第n-i+1个数据,冒泡排序第一趟完成后在进行第二趟,这样一直进行下去,知道某一趟没有发生数据交换为止。

      b、算法如下:

void Bubble_Sort(int R[],int n){
for(int i=1;i<n;i++){
    int swap =0;
    for(int j=1;j<n-1;j++){
    if(R[j]>R[j+1]){
R[0]=R[j+1];
R[j+1]=R[j];
R[j]=R[0];
swap =1;
    }
    if(swap == 0)break;
    }
}
}


原创粉丝点击