#include <iostream> using namespace std; //快排分爲經典快排,和隨機快排 //經典快排以數組左值或者右值爲樞紐,進行排序,時間複雜度,按最壞情況算法,爲O(N^2) //而隨機快排是以數組中的隨機值爲樞紐,是有概率的,因此,隨機的快排的時間複雜度,是以期望計算,有如下結論:隨機快排的時間複雜度爲O(N*logN) //修改後的荷蘭國旗問題 int* particion(int array[],int l,int r) { int less=l-1; int more=r+1; int current=l; while (current<more) { if (array[current] < array[r]) { std::swap(array[++less], array[current++]); } else if (array[current] > array[r]) { std::swap(array[--more] , array[current]); } else { current++; } } static int rearray[2]; rearray[0]=less; rearray[1]=more; cout<<rearray[0]<<" "<<rearray[1]; cout<<"----"<<endl; return rearray; } void myquicksort(int array[], int l,int r) { if (l<r) { int *a = particion(array, l, r); myquicksort(array, l, a[0]); myquicksort(array, a[1], r); } } int main() { std::cout << "測試改進後的荷蘭國旗問題(以右值爲樞紐值)" << std::endl; int myarray[]={1,3,2,4,6,8,9,11,23,45,9}; int *a1=particion(myarray,0,10); for (int i = 0; i <11 ; i++) { std::cout<<myarray[i]<<" "; } std::cout<<std::endl; std::cout<<"a1[0]:"<<a1[0]<<std::endl; std::cout<<"a1[1]:"<<a1[1]<<std::endl; cout<<"測試以荷蘭國旗爲基礎的經典快排"<<endl; myquicksort(myarray,0,10); for (int i = 0; i <11 ; i++) { std::cout<<myarray[i]<<" "; } std::cout<<std::endl; return 0; }
經典快排與隨機快排
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.