***//寫了一下對快速排序的各種優化
//證明的話有時間會寫出分析
//只自己打了一些**大家隨意看看
//如果有錯誤的還望指正***
#define k 11
#include
#include
#include
#define n 30000
int m,n;
int *p1=&m;
int *r1=&n;
//quick sort
void quicksort(int a,int p,int r);//普通的快排
int partition(int a,int p,int r);
void quicksort_insert(int a,int p,int r);//快排+插排
void insertsort(int a,int p,int r);
void quicksort_random(int a,int p,int r);//快排隨機主元
int partition_random(int a,int p,int r);
int random(int p,int r);
int partition_three_random(int a,int p,int r);
void quicksort_three_random(int a,int p,int r);//快排三位取中
void quicksort_three_random_insert(int a,int p,int r);//快排三位取中+插排
void quicksort_random_insert(int a,int p,int r);//快排隨機主元+插排
void quicksort_same(int a,int p,int r);//快排對含有大量重複元素的優化
void partition_same(int a,int p,int r);
int main(void)
void quicksort(int a,int p,int r)//快排
}int partition (int a,int p,int r)
}t=a[i+1];
a[i+1]=a[r];
a[r]=t;
return i+1;
}void quicksort_insert(int a,int p,int r)//快排+插排
else
insertsort(a,p,r);
}void insertsort(int a,int p,int r)
a[i+1]=key;
}}int partition_random(int a,int p,int r)
int random(int p,int r)
void quicksort_random(int a,int p,int r)//快排 隨機主元
}int partition_three_random(int a,int p,int r)
void quicksort_three_random(int a,int p,int r)//快排三數取中
}void quicksort_three_random_insert(int a,int p,int r)
else insertsort(a,p,r);
}void quicksort_random_insert(int a,int p,int r)
else insertsort(a,p,r);
}void partition_same(int a,int p,int r)
else
if(a[j]1;
t=a[i];
a[i]=a[j];
a[j]=t;}}
t=a[i+1];
a[i+1]=a[r];
a[r]=t;
*p1=i-count;
*r1=i+1;
}void quicksort_same(int a,int p,int r)//針對大量重複元素的優化
}
演算法 快速排序 經典快排 隨機快排
經典快排的思路是選取陣列的最後乙個數 x,按照問題一的思路把整個陣列劃分成小於等於 x 大於 x兩個部分,將 x 和 大於 x 部分陣列的第乙個元素交換位置。此時整個陣列劃分成小於等於 x x 大於 x三個部分,也就是這一次排序將 x 值排好位置。再分別對小於等於 x和大於 x中的陣列遞迴劃分,直到...
快速排序的改進 隨機快速排序
快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成o n 2 雖然這種情況很少會出現,但我們還是應該避免。演算法導論書籍中的修改方法 在排序方法中隨機化選取主元。根據計算,改進後的方法時間複雜度的期望為o nlgn 下面是改進後的 快速排序 publi...
快速排序和隨機化快排學習
0.基本思想 選定基準值 通常為當前陣列的第乙個元素 經過一系列比較和交換,將比基準值小的放在其左邊,將比基準值大的放在其右邊,這稱為是一次迴圈。include using namespace std void qsort int arr,int low,int high 從右向左找比key小的值 ...