zoukankan      html  css  js  c++  java
  • Sort 整理

     文章、图片参考:http://www.jianshu.com/p/1b4068ccd505?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

    这里用C++实现了部分排序,待更新。。。

     名词解释:

    n: 数据规模
    k:“桶”的个数
    In-place: 占用常数内存,不占用额外内存
    Out-place: 占用额外内存
    稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同

     

    冒泡排序动图演示

     

    选择排序动图演示:

     

    插入排序动图演示:

    归并排序动图演示:

    快速排序动图演示:

    堆排序动图演示:

    计数排序动图演示:

    LSD基数排序动图演示:


    1
    #include <bits/stdc++.h> 2 using namespace std; 3 void InsertSort(int na[],int n) 4 { 5 int tem,i,j; 6 for(i=1; i<n; i++) 7 { 8 tem=na[i]; 9 j=i-1; 10 while(j>=0&&tem<na[j]) 11 { 12 na[j+1]=na[j]; 13 j--; 14 } 15 na[j+1]=tem; 16 } 17 } 18 void ShellSort(int na[],int n) 19 { 20 int i,j,d,tem; 21 d=n/2; 22 while(d>0) 23 { 24 for(i=d; i<n; i++) 25 { 26 j=i-d; 27 while(j>=0&&na[j]>na[j+d]) 28 { 29 tem=na[j]; 30 na[j]=na[j+d]; 31 na[j+d]=tem; 32 j=j-d; 33 } 34 } 35 d=d/2; 36 } 37 } 38 void BubbleSort(int na[],int n) 39 { 40 int i,j; 41 for(i=0; i<n-1; i++) 42 for(j=n-1; j>i; j--) 43 if(na[j]<na[j-1]) 44 { 45 na[j] ^= na[j-1]; 46 na[j-1] ^= na[j]; 47 na[j] ^= na[j-1]; 48 } 49 } 50 void QuickSort(int na[],int s,int t) 51 { 52 int i=s,j=t,tem; 53 if(s<t) 54 { 55 tem=na[s]; 56 while(i!=j) 57 { 58 while(j>i&&na[j]>tem)j--; 59 na[i]=na[j]; 60 while(i<j&&na[i]<tem)i++; 61 na[j]=na[i]; 62 } 63 na[i]=tem; 64 QuickSort(na,s,i-1); 65 QuickSort(na,i+1,t); 66 } 67 } 68 void SelectSOrt(int na[],int n) 69 { 70 int i,j,k; 71 for(i=0; i<n-1; i++) 72 { 73 k=i; 74 for(j=i+1; j<n; j++) 75 if(na[j]<na[k]) 76 k=j; 77 if(k!=i) 78 { 79 na[i] ^= na[k]; 80 na[k] ^= na[i]; 81 na[i] ^= na[k]; 82 } 83 } 84 } 85 void Heap_Sift(int na[],int low,int high) 86 { 87 int i=low,j=2*i; 88 int tem=na[i]; 89 while(j<=high) 90 { 91 if(j<high&&na[j]<na[j+1])j++; 92 if(tem<na[j]) 93 { 94 na[i]=na[j]; 95 i=j; 96 j=2*i; 97 } 98 else break; 99 } 100 na[i]=tem; 101 } 102 void Heap_HeapSOrt(int na[],int n) 103 { 104 int i,j; 105 for(i=10; i>=1; i--) 106 na[i]=na[i-1]; 107 for(i=n/2; i>=1; i--) 108 Heap_Sift(na,i,n); 109 for(i=n; i>=2; i--) 110 { 111 na[1] ^= na[i]; 112 na[i] ^= na[1]; 113 na[1] ^= na[i]; 114 Heap_Sift(na,1,i-1); 115 } 116 } 117 void Merge_Merge(int na[],int low,int mid,int high) 118 { 119 int *n1; 120 int i=low,j=mid+1,k=0; 121 n1=(int *)malloc((high-low+1)*sizeof(int)); 122 while(i<=mid&&j<=high) 123 if(na[i]<=na[j]) 124 n1[k++]=na[i++]; 125 else 126 n1[k++]=na[j++]; 127 while(i<=mid) 128 n1[k++]=na[i++]; 129 while(j<=high) 130 n1[k++]=na[j++]; 131 for(k=0,i=low; i<=high; k++,i++) 132 na[i]=n1[k]; 133 } 134 void Merge_MergePass(int na[],int length,int n) 135 { 136 int i; 137 for(i=0; i+2*length-1<n; i=i+2*length) 138 Merge_Merge(na,i,i+length-1,i+2*length-1); 139 if(i+length-1<n) 140 Merge_Merge(na,i,i+length-1,n-1); 141 } 142 void Merge_MergeSort(int na[],int n) 143 { 144 int length,k,i=1; 145 for(length=1; length<n; length=2*length) 146 Merge_MergePass(na,length,n); 147 } 148 void CountSort(int na[],int n) 149 { 150 int nmax=0,i,j; 151 for(i=0; i<n; i++) 152 nmax=max(nmax,na[i]); 153 int na1[nmax+1]= {0}; 154 for(i=0; i<n; i++) 155 na1[na[i]]++; 156 for(j=0,i=0; i<=nmax; i++) 157 while(na1[i]--) 158 na[j++]=i; 159 } 160 void Display(int na[],int n,string s) 161 { 162 cout<<s<<": "; 163 for(int i=0; i<n; i++) 164 cout<<na[i]<<" "; 165 cout<<endl; 166 } 167 void Display(int na[],int n) 168 { 169 cout<<"HeapSort: "; 170 for(int i=1; i<=n; i++) 171 cout<<na[i]<<" "; 172 cout<<endl; 173 } 174 #define n 10 175 int main() 176 { 177 int na[n]= {9,8,7,-6,5,4,3,2,1,0}; 178 InsertSort(na,n); 179 Display(na,n,"InsertSort"); 180 181 int na1[n]= {11,0,33,77,44,55,-3,88,22,99}; 182 ShellSort(na1,n); 183 Display(na1,n,"ShellSort"); 184 185 int na2[n]= {17,11,12,13,14,15,-55,18,10,19}; 186 BubbleSort(na2,n); 187 Display(na2,n,"BubbleSort"); 188 189 int na3[n]= {21,20,23,24,25,28,26,-7,22,29}; 190 QuickSort(na3,0,n-1); 191 Display(na3,n,"QuickSort"); 192 193 int na4[n]= {31,32,38,30,33,34,-5,35,37,39}; 194 SelectSOrt(na4,n); 195 Display(na4,n,"SelectSort"); 196 197 int na5[n]= {99,11,22,100,38,42,84,74,-24,60}; 198 Heap_HeapSOrt(na5,n); 199 Display(na5,n); 200 201 int na6[n]= {999,161,272,1800,398,-12,-12,744,531,620}; 202 Merge_MergeSort(na6,n); 203 Display(na6,n,"MergeSort"); 204 205 int na7[n]= {999,161,272,1800,398,402,12,12,161,620}; 206 CountSort(na7,n); 207 Display(na7,n,"CountSort(don't sort minus)"); 208 return 0; 209 }
  • 相关阅读:
    当接口请求体里的日期格式跟web页面日期格式不一致时,该如何处理呢?
    巧妙利用selenium中的JS操作来处理特殊的文本框
    web自动化针对PO模式进行二次封装之basepage
    基于python的selenium两种文件上传操作
    selenium三大切换的骚操作之显性等待
    基于python的selenium常用操作方法(2)
    基于python的selenium常用操作方法(1)
    selenium常用的三种等待方式
    使用suds模块进行封装,处理webservice类型的接口
    使用csv模块读写csv格式文件
  • 原文地址:https://www.cnblogs.com/A--Q/p/5858291.html
Copyright © 2011-2022 走看看