排序算法总结
li15809284891
这个作者很懒,什么都没留下…
展开
-
排序算法之归并排序
思想: 1. 基于分治法 2. 将待排序序列每次进行两两划分 3. 将划分好的序列进行两两合并,并且在合并的过程中进行排序r 性能 1. 时间复杂度: * merge函数中递归是一个完全二叉树:log2n * 里面还有一个合并的while循环n * 时间复杂度 = O(nlogn) 2. 空间原创 2017-08-11 19:07:16 · 212 阅读 · 0 评论 -
插入类排序:直接插入和希尔排序
直接插入排序思想: 1. 将待排序序列分为有序区和无序区 2. 第一个元素默认作为有序区域,依次遍历后面无序区的元素,将其插入到有序区 性能* 时间复杂度:O(n2) * 空间复杂度:O(1) * 稳定性:稳定的 代码void insertSort(int a[],int n){ //i从1开始,第一个默认有序 for (int i = 1; i<n; i++) {原创 2017-08-11 20:36:55 · 463 阅读 · 0 评论 -
交换类排序:冒泡排序(优化)和快排
冒泡排序:交换类排序:两两交换,每趟交换完成后都会有一个最大的被冒到后面代码//两两交换,每趟交换之后都会冒出一个最大的放在后面, void maopao(int a[],int n){ for (int i = 0; i<n;i++) { for (int j = 0; j<n-i-1; j++) { if (a[j]>a[j+1]) {原创 2017-03-27 21:36:58 · 768 阅读 · 0 评论 -
选择类排序:直接选择与堆排
直接选择排序:整个数组分为有序区和无序区思想 一开始整个数组默认是无序区,有序区元素为空,每趟从无序区里面选出一个最小的元素,与无序区的第一个元素进行交换,整个时候有序区的元素的元素+1,无序区的元素会-1,下一趟排序再从无序区选择一个最小的与无序区的元素进行交换,无序区元素-1.有序区+1,以后执行同样的操作代码如下void selectOrder(int a[],int n ){原创 2017-03-28 09:48:49 · 453 阅读 · 0 评论