快速排序和堆排序
2015-04-13 16:24
267 查看
最近在看算法方面的知识,自己动手写了点代码。为了以后复习方便,主要是自己总是遗忘,所以把这些代码保留下来。
</pre><pre name="code" class="cpp">#include<iostream> using namespace std; void quickSort(int a[], int l, int r) { if(l < r){ swap(a[l], a[(l+r)/2]); int i = l, j = r, t = a[i]; while(i < j){ while(i < j && a[j] >= t) j--; if(i < j) a[i++] = a[j]; while(i < j && a[i] <=t) i++; if(i < j) a[j--] = a[i]; } a[i] = t; quickSort(a, l, i - 1); quickSort(a, i + 1, r); } } //k为数组中的前k个数,i为当前的数(位置非下标,下标为i-1) void maxHeap(int a[], int k, int i){ int max = i-1; if(2*i < k) if(a[2*i] > a[max]) max = 2*i; if(2*i - 1 < k) if(a[2*i - 1] > a[max]) max = 2*i - 1; if(max != i-1){ swap(a[max], a[i-1]); maxHeap(a, k, max + 1); } } void buildHeap(int a[], int k){ for(int i = k/2 - 1; i >= 0; i--) { maxHeap(a, k, i+1); } } void heapSort(int a[], int k){ buildHeap(a, k); int t = k-1; while(t>0) { swap(a[t], a[0]); maxHeap(a, t, 1); t--; } } int main(){ int a[] = {1, 5, 2, 10, 3, 5, 4, 8, 9}; //quickSort(a, 0, 8); //heapSort(a, 9); buildHeap(a, 4); for(int i = 0; i < 9; i++){ cout<<a[i]<<" "; } cout<<endl; return 0; }在写堆排序时,主要是参数k的设置,这个k为希望数组的前k个元素进行相关操作,因为在寻找最小的k个数问题中,需要建立前k个数的最大堆,所以书写函数时,考虑了相关问题。
相关文章推荐
- boj problem 1329 快速排序tle 堆排序还可以~~需要熟悉快速排序和堆排序~~静态数组全局下可以很大 但main下不行 具体看1331那篇
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 快速排序,归并排序,堆排序python实现
- 快速排序和堆排序
- 排序3——堆排序,归并排序,快速排序
- 介绍堆排序、希尔排序和快速排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- 快速排序,堆排序和归并排序谁更快?
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 程序员必知的8大排序(①直接插入排序②希尔排序③简单选择排序④堆排序⑤冒泡排序⑥快速排序⑦归并排序⑧基数排序)
- 排序总结JS版(冒泡排序、简单选择排序、快速插入排序、希尔排序、堆排序、快速排序)
- 快速排序、归并排序、堆排序的实现
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 写个堆排序,快速排序等一些排序算法
- 堆排序、快速排序(递归与非递归)、归并排序效率比较
- 几种常见排序算法的实现(冒泡法,选择法,插入法,快速排序、堆排序)
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 二哥学算法之快速排序和堆排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结