//交换voidswap(int&a,int&b){int temp = a;
a = b;
b = temp;}
冒泡排序
//冒泡排序voidBubbleSort(int A[],int n){for(int i =0; i < n -1;i++){
bool flag =false;//表示本趟冒泡是否发生交换的标志 for(int j = n-1;j>i;j--){//一趟冒泡过程 if(A[j-1]>A[j]){//若为逆序 swap(A[j-1],A[j]);//交换
flag = true;}}if(flag == false){return;//本趟遍历后没有交换,说明表已经有序 }}}
//交换voidswap(int&a,int&b){int temp = a;
a = b;
b = temp;}
简单选择排序
//简单选择排序voidSelectSort(int A[],int n){for(int i =0; i < n-1; i++){int min = i;for(int j = i+1; j<n;j++){if(A[j]<A[min]){
min = j;}}if(min!=i){swap(A[i],A[min]);}}}
堆排序
//堆排序//将以k为根的子树调整为大根堆voidHeadAdjust(int A[],int k,int len){
A[0]= A[k];//A[0]暂存子树的根节点 for(int i =2*k;i<=len;i*=2){//沿key较大的子结点向下筛选 if(i<len&&A[i]<A[i+1]){
i++;//取key较大的子结点的下标 }if(A[0]>=A[i]){break;//筛选结束 }else{
A[k]= A[i];//将A[i]调整到双亲节点上
k = i;//修改k值,以便继续向下筛选 }}
A[k]= A[0];//被筛选结点的值放入最终位置 }//建立大根堆voidBuildMaxHeap(int A[],int len){for(int i = len/2;i>0;i--){HeadAdjust(A,i,len);//从后往前调整所有非终端节点 }}//堆排序的完整逻辑voidHeadSort(int A[],int len){BuildMaxHeap(A,len);//初始建堆 for(int i = len;i>1;i--){//n-1趟的交换和建堆过程 swap(A[i],A[1]);//堆顶元素和堆底元素交换 HeadAdjust(A,1,i-1);//把剩余的待排序元素整理成堆 }}