返回顶部

交换排序

冒泡排序

void BubbleSort(int A[],int n) {
    int i,j;
    for(i=0; i<n-1; i++) {
        bool flag=false;//表示本趟冒泡是否发生交换的标志 
        for(j=n-1; j>i; j--) {//一趟冒泡的过程 
            if(A[j-1]>A[j]) {//若为逆序 
                swap(A[j-1],A[j]);//交换 
                flag=true;
            }

        }
        if(flag==false)//本趟遍历后没有发生交换,说明表已经有序 
            return;

    }

}

快速排序

int Partition(int A[],int low,int high)
 {
     int pivot=A[low];//将表第一个元素设为中枢,对表进行划分
     while(low<high)//循环跳出条件
     {
         while(low<high&&A[high]>=pivot)--high;
         A[low]=A[high];//将比中枢小的元素移动到左端
         while(low<high&&A[low]<=pivot)++low;
         A[high]=A[low];//将比中枢大的元素移动到右端
     }
     A[low]=pivot;//中枢元素存放最终的位置
     return low;//返回存放中枢的最终位置
 }
void QuickSort(int A[],int low,int high)
{
    if(low<high)//递归跳出的条件
    {
        int pivotpos=Partition(A,low,high);//划分操作
        QuickSort(A,low,pivotpos-1);//对两个子表进行递归排序
        QuickSort(A,pivotpos+1,high);
    }
 }

 

posted @ 2020-08-01 14:18  tianyudizhua  阅读(108)  评论(0编辑  收藏  举报