1)冒泡排序
void BubbleSort(SeqList &L){
for(int i=0;i<L.length;i++){
flag=false; //用来记录一趟冒泡排序是否发生了交换
for(int j=L.length;j>i;j--){
if(L.r[j-1].key>L.r[j].key) //逆序:前面的比后面的大,则交换
{
swap(L.r[j-1],L.r[j]);
flag=true;
}
}
if(flag==false) return;
}
}2)快速排序
void QuickSort(ElemType A[],int low,int high)
{
if(low<high) //递归跳出条件
{
//partition()就是划分操作,将表A[low...high]划分为两个子表
int pivotopos=partition(A,low,high); //划分
QuickSort(A,low,privotopos-1); //依次对两个子表进行递归排序
QuickSort(A,privotopos+1,high);
}
}
int Partition(SqlList &L,int low,int high){
L.r[0]=L.r[low];
privotkey=L.r[low].key;//将当前表中的第一个元素设置为枢轴值,将表进行划分
while(low<high){ //循环跳出条件
while(low<high&&L.r[high].key>=privotkey) --high;
L.r[low]=L.r[high];
while(low<high&&L.r[low].key<=prvotkey) ++low;
L.r[high]=L.r[low];
}
L.r[low]=L.r[0]; //枢轴纪录到位
return low; //返回枢轴位置
}
京公网安备 11010502036488号