快速排序
冒泡排序
每次循环,相邻两元素两两比较,不符合则交换,最大元素沉底
//随便写的,好像不对
void BmbleSort(SqList &L)
{
for (int k = 1; k <= L.length - 1; k++)
{
for (int i = 1; i < L.length - k; i++)
{
if (L.r[i].key > L.r[i + 1].key)
swap(L.r[i], L.r[i + 1]);
}
}
}
快速排序(Quick Sort)
1 快速排序的原理
递归边界:序列长为1或0则不必排序
递归关系:
薛烈长度大于1,则选择某元素作为枢轴(如最左侧元素)
根据枢轴元素将原序列一份为二(划分)
左右两侧子序列通过重复上述过程,递归完成各自的排序
划分:选最左元素作为枢轴,备份之,令low和high指向两端
先high向左找小元素移动到右侧,再low向右找元素移动到左侧,
如此重复至两者相遇;
填入枢轴,完成划分
2 快速排序算法的实现
int Partition(SqList L, int low, int high)
{
L.r[0] = L.r[low];
while (low < high)
{
while (high > low && L.r[high] >= L.r[0])
high--;
L.r[low] = L.r[high];
while (low < high && L.r[low] <= L.r[0])
low++;
L.r[high] = L.low;
}
L.r[low] = L.r[0];
return low;
}
void QSort(SqList &L, int low, int high)
{
if (low >= high) return ;
else
{
pivoLoc = Partition(L, low, high);
QSort(L, low, pivoLoc - 1);
Q.Sort(l, pivoLoc + 1, high);
}
}
3 总结与推广