分治法-快速排序

分治法-快速排序,第1张

//分治法-快速排序


#include
void disp(int a[],int n){
    
    for(int i=0;i
        printf("%d ",a[i]);
    }
    printf("\n");
    
}//遍历输出数组 

int partition(int a[],int s,int t){
    int i=s,j=t,temp=a[s];     //其中s是初始每一趟划分的数组里的第一个元素的下标,t为最后一个元素的下标 ,temp以第一个元素作为每一趟的那一个比较对象 
    while(i!=j)    
    {
        while(j>i&&a[j]>=temp){
            j--;
        }   //满足j>i,当a[j]>temp时自动略过,继续j--,直到a[j]         a[i]=a[j];//否则就把序号j的值赋值给序号i;


        while(i
            i++;
        } //满足itemp,则跳出循环进行数值交换,即下一步
        a[j]=a[i];
    } //当i=j时则比较结束,与此同时此时的i或者j就是 temp目前的位置
    a[i]=temp;//出循环则i/j就是temp的下标 
    return i;//return出的是每一轮temp的下标=下一趟的分界点 
    
}//每一趟进行的a[i]与a[j]之间的数值交换(划分算法) 

void QuickSort(int a[],int s,int t){
        if(s
        int i=partition(a,s,t);//运用partition函数找到分界点 
        QuickSort(a,s,i-1);
        QuickSort(a,i+1,t);
    }
} //快速排序算法 
int main(){
    int n=10;
    int a[]={12,52,9,30,11,6,16,44,22,10};
    printf("数组排序前:");
    disp(a,n);
    QuickSort(a,0,n-1);
    printf("数组排序后:");
    disp(a,n);
     

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存