文章、图片参考: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. 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=; i<n; i++)
  7. {
  8. tem=na[i];
  9. j=i-;
  10. while(j>=&&tem<na[j])
  11. {
  12. na[j+]=na[j];
  13. j--;
  14. }
  15. na[j+]=tem;
  16. }
  17. }
  18. void ShellSort(int na[],int n)
  19. {
  20. int i,j,d,tem;
  21. d=n/;
  22. while(d>)
  23. {
  24. for(i=d; i<n; i++)
  25. {
  26. j=i-d;
  27. while(j>=&&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/;
  36. }
  37. }
  38. void BubbleSort(int na[],int n)
  39. {
  40. int i,j;
  41. for(i=; i<n-; i++)
  42. for(j=n-; j>i; j--)
  43. if(na[j]<na[j-])
  44. {
  45. na[j] ^= na[j-];
  46. na[j-] ^= na[j];
  47. na[j] ^= na[j-];
  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-);
  65. QuickSort(na,i+,t);
  66. }
  67. }
  68. void SelectSOrt(int na[],int n)
  69. {
  70. int i,j,k;
  71. for(i=; i<n-; i++)
  72. {
  73. k=i;
  74. for(j=i+; 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=*i;
  88. int tem=na[i];
  89. while(j<=high)
  90. {
  91. if(j<high&&na[j]<na[j+])j++;
  92. if(tem<na[j])
  93. {
  94. na[i]=na[j];
  95. i=j;
  96. j=*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=; i>=; i--)
  106. na[i]=na[i-];
  107. for(i=n/; i>=; i--)
  108. Heap_Sift(na,i,n);
  109. for(i=n; i>=; i--)
  110. {
  111. na[] ^= na[i];
  112. na[i] ^= na[];
  113. na[] ^= na[i];
  114. Heap_Sift(na,,i-);
  115. }
  116. }
  117. void Merge_Merge(int na[],int low,int mid,int high)
  118. {
  119. int *n1;
  120. int i=low,j=mid+,k=;
  121. n1=(int *)malloc((high-low+)*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=,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=; i+*length-<n; i=i+*length)
  138. Merge_Merge(na,i,i+length-,i+*length-);
  139. if(i+length-<n)
  140. Merge_Merge(na,i,i+length-,n-);
  141. }
  142. void Merge_MergeSort(int na[],int n)
  143. {
  144. int length,k,i=;
  145. for(length=; length<n; length=*length)
  146. Merge_MergePass(na,length,n);
  147. }
  148. void CountSort(int na[],int n)
  149. {
  150. int nmax=,i,j;
  151. for(i=; i<n; i++)
  152. nmax=max(nmax,na[i]);
  153. int na1[nmax+]= {};
  154. for(i=; i<n; i++)
  155. na1[na[i]]++;
  156. for(j=,i=; 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=; 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=; i<=n; i++)
  171. cout<<na[i]<<" ";
  172. cout<<endl;
  173. }
  174. #define n 10
  175. int main()
  176. {
  177. int na[n]= {,,,-,,,,,,};
  178. InsertSort(na,n);
  179. Display(na,n,"InsertSort");
  180.  
  181. int na1[n]= {,,,,,,-,,,};
  182. ShellSort(na1,n);
  183. Display(na1,n,"ShellSort");
  184.  
  185. int na2[n]= {,,,,,,-,,,};
  186. BubbleSort(na2,n);
  187. Display(na2,n,"BubbleSort");
  188.  
  189. int na3[n]= {,,,,,,,-,,};
  190. QuickSort(na3,,n-);
  191. Display(na3,n,"QuickSort");
  192.  
  193. int na4[n]= {,,,,,,-,,,};
  194. SelectSOrt(na4,n);
  195. Display(na4,n,"SelectSort");
  196.  
  197. int na5[n]= {,,,,,,,,-,};
  198. Heap_HeapSOrt(na5,n);
  199. Display(na5,n);
  200.  
  201. int na6[n]= {,,,,,-,-,,,};
  202. Merge_MergeSort(na6,n);
  203. Display(na6,n,"MergeSort");
  204.  
  205. int na7[n]= {,,,,,,,,,};
  206. CountSort(na7,n);
  207. Display(na7,n,"CountSort(don't sort minus)");
  208. return ;
  209. }

Sort 整理的更多相关文章

  1. qsort函数、sort函数 (精心整理篇)

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  2. forEach、map、filter、find、sort、some等易错点整理

    一.常用方法解析   说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点   forEac ...

  3. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  4. NOIP模板整理计划

    先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...

  5. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  6. [python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    将昨日取得的众多的沪深龙虎榜数据整一整 提取文件夹内所有抓取下来的沪深龙虎榜数据,整理出沪深两市(含中小创)涨幅榜股票及前5大买入卖出资金净值,保存到csv文件 再手动使用数据透视表进行统计 原始数据 ...

  7. 《JavaScript高级程序设计》笔记整理

    欢迎各位指导与讨论 : ) -------------------------待续------------------------------- 本文为笔者在学习时整理的笔记,如有错漏,恳请各位指出, ...

  8. JavaScript Array 常用函数整理

    按字母顺序整理 索引 Array.prototype.concat() Array.prototype.filter() Array.prototype.indexOf() Array.prototy ...

  9. shell常用命令归类整理

    shell 命令整理     bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...

随机推荐

  1. C++中函数的默认参数和C语言中volatile的学习

    1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...

  2. Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则

    一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以Controller名命名的文件夹下.如果我们写到别处呢?那么肯 ...

  3. ArcGIS 帮助(10.2、10.2.1 和 10.2.2)收集

    帮助首页 [Oracle基础] 快速浏览:Oracle 地理数据库 什么是 Oracle Spatial? 设置到 Oracle 的连接 存储在 Oracle 地理数据库中的系统表 结合企业级地理数据 ...

  4. 轻快的VIM(三):删除

    这一节我们来看看删除,删除命令比较简单,不过要使删除更有效率 你需要配合我们第一节中讲的各种移动命令 字符删除 x 删除光标所在处字符 X 删除光标所在前字符 这里没有什么可注意的地方,但需要说明一下 ...

  5. SPDY 是什么?如何部署 SPDY?

    摘要:当老迈的 HTTP 协议逐渐不能满足人们需求的时候,Google 的 SPDY 协议出现在面前,那么这个长期以来一直被认为是 HTTP 2.0 唯一可行选择的 SPDY 是什么呢?当下我们如何能 ...

  6. htm.dropdownlist

    @Html.DropDownList("status", new SelectList(new[] { "驳回", "确认", " ...

  7. SQL server 中的@,@@、#,##分别代表什么?

    @声明变量,@@系统函数,#本地临时表,##全局临时 表    

  8. BP神经网络推导过程详解

    BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...

  9. NameNode & DataNode

    NameNode类位于org.apache.hadoop.hdfs.server.namenode包下. NameNode serves as both directory namespace man ...

  10. 【codevs1043】 方格取数

    http://codevs.cn/problem/1043/ (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的两条路径,使得取到的数的和最大. Solution ...