快速排序
快速排序的演算法複雜度最大可達到o(n*n)但平均演算法複雜度為
o(n*logn),由於快排採用了分治法,挺好用的,而且排序效率相對其他幾種排序演算法效率更高。
快排採用的是一般取第乙個數為基準小的放在左邊,大的放在右邊,然後再對左邊的進行分治,再右邊的,按此下去達到排序的目的。
下面簡述快排的思想:
如:陣列a[5] =
以第乙個數a[0]即2為基準,指標i,j 分別從兩頭開始掃瞄直到找到小於key的數,否則從左邊開始掃瞄,定義乙個關鍵子key用來儲存基準數,如果找到則儲存在a[0]此時又空出了乙個位置此時從左邊掃瞄,掃瞄到的放到右邊的空位置。
此時key = 2
先從左邊開始掃瞄:
第一次:
22 4 5 1 6
第二次:2 1 4 5 1 6
從左邊掃瞄:
第三次:2 1 4 5 4 6
第四次:2 1 4 5 4 6
得到:[1] 2 [5 4 6]
因為左邊只有乙個數,所以只對右邊再次採取分治法:
此時以5 為基準數即key = 5;
得到:[4] 5 [6]
最後:[1] 2 [4] [5] [6]
**實現:
void qksort(int a,int low,int high)//low表示陣列的低位,high表示陣列的高位
int i = low;
int j = high;
int key = a[low];
//利用迴圈分治
while(i != j)
} for(;i != j;i++)
} }
a[i]=key;//將原取出的key值放回分界處
qksort(a,low,i-1);//遞迴呼叫
qksort(a,j+1,high);
}
全部**:
#include#includeusing namespace std;
//快速排序以遞迴實現的**
void qksort(int a,int low,int high)
int i = low;
int j = high;
int key = a[low];
while(i != j)
} for(;i != j;i++)
} }
a[i]=key;
qksort(a,low,i-1);
qksort(a,j+1,high);
}int main()
; qksort(a,0,4);
for(int i=0;i<5;i++)
{cout<
快速排序簡述
快排是不穩定的排序。複雜度介於nlogn n n 之間 均攤nlogn 當每次取值恰好能取到中位數時,複雜度最小,即為n logn。當每次取值取到極值時,當待排序資料的重複性很高時,時間複雜度最大,即為n n 對於無序資料,快排均攤複雜度為n logn 且常數係數很小,為八大排序中最快。快排的特性就...
基本排序之快速排序
快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。快速排序 概述 1 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。2 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。3 然後用partition...
快速排序演算法簡述
快速排序在演算法具有重要的地位,每一位程式都應該了解,並且能夠熟練使用,以下最簡單遞迴實現方法 c include using namespace std void quicksort int num,int left,int right int main for i 0 i 5 i cout co...