一.冒泡排序
1.简单的冒泡排序
void BubbleSort(SqList &L)
{
for(int i=1; i<L.len; i++)
for(int j=i+1; j<=L.len; j++)
if(L.elem[i].key > elem[j].key)
swap(L.elem, i, j);
}
简单冒泡优化:
1.将截止到当前第i小的数据放到第i位置;
2.将较小的数据尽可能前移,数据量大时优势明显。
2.标准冒泡排序
void BubbleSort(SqList &L)
{
for(int i=1; i<L.len; i++)
for(int j=L.len-1; j>=i; j--)
if(L.elem[j].key > elem[j+1].key)
swap(L.elem, j, j+1);
}
标准冒泡优化
void BubbleSort(SqList &L)
{
flag = 1;
for(int i=1; i<L.len && flag; i++){
flag = 1;
for(int j=L.len-1; j>=i; j--)
if(L.elem[j].key > elem[j+1].key)
{
swap(L.elem, j, j+1);
flag = 1;
}
}
}
二.快速排序
交替震荡逼近法
//快速划分算法
int Partition(SqList &L, int low, int high)
{
L.elem[0] = L.elem[low];
while(low<high){
while(low<high && L.elem[high].key>=L.elem[0].key)
high --;
swap(L.elem, low, high);
while(low<high && L.elem[low].key<=L.elem[0].key)
low ++;
swap(L.elem, low, high);
}
L.elem[low] = L.elem[0];
return low;
}
//递归排序算法
void QuickSort(SqList &L, int low, int high)
{
if(low < high)
{
pivot = Partition(L, low, high);
QuickSort(L, low, pivot-1);
QuickSort(L, pivot+1, high);
}
}
快速排序优化:
枢轴改进:随机位置法或三数取中法
其他改进:小数组时优化(引入插入排序)或递归过程优化(迭代代替递归)