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; //返回枢轴位置 }