一、快速排序
1.1 算法思路
1.2 算法描述
1.3 算法实现
方法一:递归形式实现
#include<iostream>
using namespace std;
typedef int KeyType;
struct ElemType
{
KeyType key;
int exist;
};
struct SeqList
{
ElemType *elem;
int length;
};
int Partition(SeqList &L, int a, int b)
{
ElemType x = L.elem[a];
while(a < b)
{
while(a < b && L.elem[b].key >= x.key)
b--;
L.elem[a] = L.elem[b];
while(a < b && L.elem[a].key <= x.key)
a++;
L.elem[b] = L.elem[a];
}
L.elem[a] = x;
return a;
}
void QuickSort(SeqList &L, int a, int b)
{
if(a >= b)
return;
int p = Partition(L, a, b);
QuickSort(L, a, p-1);
QuickSort(L, p+1, b);
}
void QuickSort(SeqList &L)
{
int a = 1;
int b = L.length;
QuickSort(L, a, b);
}
int main()
{
ElemType test[] = { {4},{6},{2},{7},{5},{1},{3},{8} };
SeqList L;
L.elem = test;
L.length = 8;
QuickSort(L);
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i].key << endl;
}
return 0;
}
方法二:非递归形式实现
在这里插入代码片
1.4 算法复杂度分析
时间复杂度的平均值为
O
(
n
∗
l
o
g
2
n
)
O(n*log_2n)
O(n∗log2n)
空间复杂度的平均值为
O
(
l
o
g
2
n
)
O(log_2n)
O(log2n)
时间复杂度的最大值为
O
(
n
2
)
O(n^2)
O(n2)
空间复杂度的最大值为
O
(
n
)
O(n)
O(n)
1.5 相关练习题