zoukankan      html  css  js  c++  java
  • 排序算法总结

    关于各种排序算法的总结表格,这里偷个懒直接用Simple life的博客http://blog.csdn.net/whuslei/article/details/6442755中的图片了

    下面是自己写的各种排序的程序:

      1 #include<iostream>
      2 using namespace std;
      3 
      4 void swap(int *num,int i,int j)
      5 {
      6     int temp=num[i];
      7     num[i]=num[j];
      8     num[j]=temp;
      9 }
     10 //插入排序
     11 void sort_charu(int *num,int n)
     12 {
     13     for(int i=1;i<n;i++)
     14     {
     15         if(num[i]<num[i-1])
     16         {
     17             int temp=num[i];
     18             int j=i-1;
     19             while(j>=0 && temp<num[j])
     20             {
     21                 num[j+1]=num[j];
     22                 j--;
     23             }
     24             num[j+1]=temp;
     25         }
     26         
     27     }
     28 }
     29 ///////////////////////////////
     30 //shell排序
     31 void sort_shell(int *num,int n)
     32 {
     33     int d=n;
     34     while(d>1)
     35     {
     36         d=d/2;
     37         for(int i=d;i<n;i=i+1)
     38         {
     39             if(num[i]<num[i-d])
     40             {
     41                 int temp=num[i];
     42                 int j=i-d;
     43                 while(num[j]>temp&&j>=0)
     44                 {
     45                     num[j+d]=num[j];
     46                     j=j-d;
     47                 }
     48                 num[j+d]=temp;
     49             }
     50         }
     51     }
     52 }
     53 ////////////////////////////////////////////////
     54 //选择排序
     55 void sort_xuanze(int *num,int n)
     56 {
     57     int i,j;
     58     for(i=n-1;i>=0;i--)
     59     {
     60         int max=num[0];
     61         int xiabiao=0;
     62         for(j=1;j<=i;j++)
     63         {    
     64             if(max<num[j])
     65             {
     66                 max=num[j];
     67                 xiabiao=j;
     68             }
     69         }
     70         swap(num,i,xiabiao);
     71     }
     72 }
     73 /////////////////////////////////
     74 //堆排序
     75 //将num数组中s到n的数据建立成为大顶堆
     76 void heapadjust(int *num,int s,int n)
     77 {
     78     int temp=num[s];
     79     for(int i=2*s;i<=n;i=i*2)
     80     {
     81         if(i<n && num[i+1]>num[i])
     82         {
     83             i++;
     84         }
     85         if(temp<num[i])
     86         {
     87             num[s]=num[i];
     88             s=i;
     89         }
     90     }
     91     num[s]=temp;
     92 }
     93 
     94 void sort_dui(int *num,int n)
     95 {
     96     //从最后一个非叶子节点开始组建大顶堆
     97     for(int i=n/2;i>0;i--)
     98     {
     99         heapadjust(num,i,n);
    100     }
    101     //每次将第一个元素与堆顶元素交换,然后重新调整堆
    102     for(int i=n;i>1;i--)
    103     {
    104         swap(num,i,1);
    105         heapadjust(num,1,i-1);
    106     }
    107 }
    108 //冒泡排序
    109 void sort_maopao(int *num,int n)
    110 {
    111     int flag=1;
    112     for(int i=n-1;i>0 && flag==1;i--)
    113     {
    114         flag=0;
    115         for(int j=0;j<i;j++)
    116         {
    117             if(num[j]>num[j+1])
    118             {
    119                 swap(num,j,j+1);
    120                 flag=1;
    121             }
    122         }
    123 
    124     }
    125 }
    126 ///////////////////////////////////
    127 //快速排序
    128 void sort_quick_diedai(int *num,int start,int end)
    129 {
    130     int temp=num[start];
    131     int i=start;
    132     int j=end;
    133     if(start<end)
    134     {
    135         while(i<j)
    136         {
    137             while(num[j]>=temp&&j>i)
    138             {
    139                 j--;
    140             }
    141             if(i<j)
    142             {
    143                 num[i]=num[j];
    144                 i++;
    145             }
    146             while(num[i]<=temp && i<j)
    147             {
    148                 i++;
    149             }
    150             if(i<j)
    151             {
    152                 num[j]=num[i];
    153                 j--;
    154             }
    155         }
    156         num[i]=temp;   
    157         sort_quick_diedai(num,start,i);
    158         sort_quick_diedai(num,i+1,end);
    159     }
    160 }
    161 void sort_quick(int *num,int n)
    162 {
    163     sort_quick_diedai(num,0,n-1);
    164 }
    165 ///////////////////////////////////////////////////
    166 //归并排序
    167 //将num看成两个有序的数组,num[start...mid]和num[mid+1...end],将其合并为一个有序的数组
    168 void merge_num(int *num,int start,int mid,int end,int *p)
    169 {
    170     int i=start;
    171     int j=mid+1;
    172     int k=0;
    173     while(i<=mid &&j<=end)
    174     {
    175         if(num[i]<=num[j])
    176         {
    177             p[k++]=num[i++];
    178         }
    179         if(num[j]<=num[i])
    180         {
    181             p[k++]=num[j++];
    182         }
    183     }
    184     while(i<=mid)
    185     {
    186         p[k++]=num[i++];
    187     }
    188     while(j<=end)
    189     {
    190         p[k++]=num[j++];
    191     }
    192     for(int i=0;i<k;i++)
    193     {
    194         num[start+i]=p[i];
    195     }
    196 
    197 }
    198 void sort_guibing_digui(int *num,int start,int end,int *p)
    199 {
    200     if(start<end)
    201     {
    202         int mid=(start+end)/2;
    203         sort_guibing_digui(num,start,mid,p);
    204         sort_guibing_digui(num,mid+1,end,p);
    205         merge_num(num,start,mid,end,p);
    206     }
    207 }
    208 void sort_guibing(int *num,int n)
    209 {
    210     int *p=new int[n];
    211     sort_guibing_digui(num, 0, n-1,p);
    212     delete []p;
    213 }
    214 
    215 void print(int *num,int n)
    216 {
    217     for(int i=0;i<n;i++)
    218     {
    219         cout<<num[i]<<" ";
    220     }
    221     cout<<endl;
    222 }
    223 int main()
    224 {
    225     int num[10]={0,45,12,4,54,5,1,2,4,6};
    226     //sort_charu(num,10);
    227     //sort_xuanze(num,10);
    228     //sort_maopao(num,10);
    229     //sort_quick(num,10);
    230     //sort_shell(num,10);
    231     //sort_dui(num,9);//由于二叉树的性质所致,堆排序是从编号为1开始排序
    232     sort_guibing(num,10);
    233     print(num,10);
    234     return 0;
    235 }
  • 相关阅读:
    HTTP协议学习---(三)摘要认证
    HTTP协议学习---(二)基本认证
    HTTP之referer(网上搜集)
    request 和response
    Python开发最常犯错误总结10种
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/bewolf/p/4743271.html
Copyright © 2011-2022 走看看