《算法导论》8、快速排序实现(C++)
2015-05-18 22:57
190 查看
首先上一个正常版的,这种版本的程序对于升序或者降序的数组,会达到最差情况。
然后上一个随机版本的,随机就是在使用快排之前,先对数组进行随机化处理。
但是这样太2了,所以我的策略是(其实是书上抄的),随机选取r,然后和最后一位交换位置。
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int partition(int* A, int p, int r) { if (p < r) { int x = A[r]; int i=p-1, j; int temp; for (j = p; j < r; j++) { if (A[j] <= x) { i++; temp = A[i]; A[i] = A[j]; A[j] = temp; } } temp = A[i + 1]; A[i + 1] = A[r]; A[r] = temp; return i + 1; } } void quickSort(int* A, int p, int r) { if (p < r) { int q = partition(A, p, r); quickSort(A, p, q - 1); quickSort(A, q + 1, r); } } void main() { int n = 100000; //排序元素长度 int* A = new int ; for (int i = 0; i <n; i++) { A[i] = rand() % 1000; } clock_t start, finish; double totaltime; start = clock(); quickSort(A,0,n-1); finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; /*for (int i = 0; i < n; i++) { cout << A[i] << " "; } cout << endl;*/ cout << "堆排序的运行时间为" << totaltime << "秒!" << endl; system("pause"); }
然后上一个随机版本的,随机就是在使用快排之前,先对数组进行随机化处理。
但是这样太2了,所以我的策略是(其实是书上抄的),随机选取r,然后和最后一位交换位置。
#include <iostream> #include <stdlib.h> #include<time.h> using namespace std; int partition(int* A, int p, int r) { if (p < r) { int r1 = (rand() % (r - p + 1)) + p; int temp=A[r1]; A[r1] = A[r]; A[r] = temp; int x = A[r]; int i=p-1, j; for (j = p; j < r; j++) { if (A[j] <= x) { i++; temp = A[i]; A[i] = A[j]; A[j] = temp; } } temp = A[i + 1]; A[i + 1] = A[r]; A[r] = temp; return i + 1; } } void quickSort(int* A, int p, int r) { if (p < r) { int q = partition(A, p, r); quickSort(A, p, q - 1); quickSort(A, q + 1, r); } } void main() { int n = 100000; //排序元素长度 int* A = new int ; for (int i = 0; i <n; i++) { A[i] = rand() % 1000; } clock_t start, finish; double totaltime; start = clock(); quickSort(A,0,n-1); finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; /*for (int i = 0; i < n; i++) { cout << A[i] << " "; } cout << endl;*/ cout << "堆排序的运行时间为" << totaltime << "秒!" << endl; system("pause"); }
相关文章推荐
- 《算法导论》CLRS算法C++实现(四)P85 快速排序
- 算法导论 第七章快速排序和两种swap函数实现方式比较
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 《算法导论》CLRS算法C++实现(四)P85 快速排序
- 算法导论快速排序实现
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 《算法导论》第七章----快速排序(代码实现+部分练习+部分证明)
- 算法导论-第七章-快速排序:随机化快速排序C++实现
- 《算法导论的Java实现》 8 快速排序
- 算法导论Java实现-快速排序(第七章)
- 读《算法导论》我来C语言实现(4)——快速排序
- C++实现快速排序(源代码)
- 交换排序—快速排序(Quick Sort)原理以及Java实现
- [算法导论] 快速排序以及最大堆的C++实现
- 快速排序及Java实现
- 快速排序的java实现
- HDU 1425 sort C语言实现快速排序
- 快速排序 代码实现
- 算法导论:最大子数组问题(java实现)