快速排序和堆排序
2012-05-31 21:57
176 查看
快速排序:
堆排序
#include <iostream> using namespace std; int n[5] = {4,3,1,5,2}; void quickSort(int s, int t); int sort(int s, int t); int main() { quickSort(0,4); for (int i=0;i<5;i++) cout<<n[i]; return 0; } void quickSort(int s, int t) { if(s>=t) return; int k = sort(s, t); quickSort(s,k-1); quickSort(k+1,t); return; } int sort(int s, int t) { int key = n[s]; while(s<t) { while(n[t]>=key&&t>s) t--; n[s] = n[t]; s++; while(n[s]<=key&&t>s) s++; n[t] = n[s]; t--; } n[s] = key; return s; }
堆排序
#include <iostream> using namespace std; int n[10] = {5,1,4,9,8,7,6,2,10,3}; int l = 10; void creatHeap(); void backHeap(int t); int main() { creatHeap(); int i; for (i=1;i<=l;i++) { cout<<n[0]; n[0] = n[l-i]; backHeap(l-i); } return 0; } void creatHeap() { int i; for (i=l/2;i>=1;i--) { if (2*i==l||n[2*i-1]>n[2*i]) { if (n[i-1]<n[2*i-1]) { int temp = n[2*i-1]; n[2*i-1] = n[i-1]; n[i-1] = temp; } } else if (n[2*i-1]<=n[2*i]) { if (n[i-1]<n[2*i]) { int temp = n[2*i]; n[2*i] = n[i-1]; n[i-1] = temp; } } } } void backHeap(int t) { int i; for (i=1;i<=t/2;i++) { if (2*i==t||n[2*i-1]>n[2*i]) { if (n[i-1]<n[2*i-1]) { int temp = n[2*i-1]; n[2*i-1] = n[i-1]; n[i-1] = temp; } } else if (n[2*i-1]<=n[2*i]) { if (n[i-1]<n[2*i]) { int temp = n[2*i]; n[2*i] = n[i-1]; n[i-1] = temp; } } } }
相关文章推荐
- javascript冒泡排序,快速排序和堆排序
- 快速排序与堆排序的实现
- 排序算法一(直接选择,堆排序,冒泡排序和快速排序)
- 堆排序和快速排序
- 排序----插入排序,二路归并排序,堆排序,快速排序
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- 关于堆排序、归并排序、快速排序的比较,到底谁快
- 写一下快速排序和堆排序,两个简单又神奇的算法
- 快速排序和堆排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- David MacKay:用信息论解释 '快速排序'、'堆排序' 本质与差异
- 快速排序,归并排序,堆排序python实现
- 快速排序和堆排序
- 堆排序和快速排序
- 初级版、正宗版、升级版冒泡排序;简单选择排序;直接插入排序;希尔排序;堆排序;递归法 、非递归法归并排序;快速排序; 快速排序优化算法
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- 快速排序,堆排序和归并排序谁更快?
- boj problem 1329 快速排序tle 堆排序还可以~~需要熟悉快速排序和堆排序~~静态数组全局下可以很大 但main下不行 具体看1331那篇