算法导论之随机化快速排序实现

来源:互联网 发布:php 自动实例化类 编辑:程序博客网 时间:2024/05/17 23:48
//快速排序是一种最坏情况时间复杂度为O(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是//实际排序应用中最好的选择。因为它的平均性能非常好。它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的//常数因子非常小,另外,它还能进行原址排序。当输入数组完全有序时,快速排序的时间复杂度让然为O(nlgn)//快速排序的平均运行时间更接近于其最好情况。#include <iostream>using namespace std;void RandomizedQuickSort(int A[], int p, int r);int RandomizedPartition(int A[], int p, int r);int Partition(int A[], int p, int r);void RandomizedQuickSort(int A[], int p, int r){int q;if (p < r){q = RandomizedPartition(A, p, r);RandomizedQuickSort(A, p, q-1);RandomizedQuickSort(A, q + 1, r);}}int RandomizedPartition(int A[], int p, int r){int i = rand() % (r - p + 1) + p;swap(A[i], A[r]);return Partition(A, p, r);}int Partition(int A[], int p, int r){int x = A[r];int i = p - 1;for (int j = p; j < r; j++){if (A[j] <= x){i++;swap(A[j], A[i]);}}swap(A[r], A[i + 1]);return i + 1;}int main(){int arr[] = { 20,40,90,50,10,80,80,70,60,100 };RandomizedQuickSort(arr, 0, 9);for (int i = 0; i < 10; i++){cout << arr[i] << ",";}cout << endl;system("pause");return 0;}
10,20,40,50,60,70,80,80,90,100,
请按任意键继续. . .


原创粉丝点击