快速排序

快速排序算法首先会在序列中选择一个基准值(pivot),将除基准值以外的数分为“比基准值大的数”和“比基准值小的数”。

步骤

a. 先从数列中取出一个数作为基准数。

b. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

c. 再对左右区间重复第二步,直到各区间只有一个数。

#include<stdio.h>
void QuickSort(int *arr,int low,int high)
{
    if(low>=high)
    {
        return ;
    }
    int pivot=arr[low];     //选择最左边的为基准值
    int i=low;          //需要用i,j来表示low和high的变化
    int j=high;
    
    while(i<j)
    {
        while(i<j && arr[j]>=pivot)     //排除右边比基准值大的数
        {
            j--;
        }
        arr[i]=arr[j];
        while(i<j && arr[i]<=pivot)      //排除左边比基准值小的数
        {
            i++;
        }
        arr[j]=arr[i];
    }
    arr[i]=pivot;       //此处i是最终基准值对应的下标
    //return low;           //函数数据类型是void没有返回值

QuickSort(arr,low,i-1);     //排好基准值左边
QuickSort(arr,i+1,high);        //排好基准值右边
}
int main()
{
    int arr[]={0,4,3,5,65,2,64,68,34,94,53,74,13};
    int len=sizeof(arr)/sizeof(arr[0]);
    printf("待排序数值:");
    for(int i=0;i<len;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    printf("快速排序后的数值:");
    QuickSort(arr,0,len-1);
    for(int i=0;i<len;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

 

posted @ 2021-10-22 15:36  疯在其中不愿醒  阅读(39)  评论(0)    收藏  举报