快速排序

方法: 双指针+递归
目的: 达到升序排列

#include <iostream>
#include <stdio.h>

void myPrint(int *p,int len);
void mySort(int *arr,int start,int end);

int main()
{
    int arr[]={10,2,44,3,8,1,0,12,11,9};
    int len = sizeof(arr)/sizeof(int);
    myPrint(arr,len);
    mySort(arr,0,len-1);
    myPrint(arr,len);
    return 0;
}

void myPrint(int *p,int len)
{
    for (int i=0;i<len;++i)
    {
        if(i!=(len-1))
            printf("%d--",p[i]);
        else
            printf("%d",p[i]);
    }
    printf("\n");
}
void mySort(int *arr,int start,int end){
// 所传递过来的是数组的起始位置,致终点位置
    if(start>=end) // 目的是数组内至少有大于1个的元素
        return;
// 保存起始位置和终点位置,和第一个元素位置
    int i=start,j=end,x=arr[i];
    while(i<j)
    {
        while(i<j && arr[j]>=x)
            j--;
        if(i<j)
            arr[i] = arr[j];
        while(i<j && arr[i]<x)
            i++;
        if(i<j)
            arr[j--] = arr[i];
    }
    arr[i] = x;
    mySort(arr,start,i-1);
    mySort(arr,i+1,end);
}  

posted on 2021-06-03 23:47  lodger47  阅读(33)  评论(0)    收藏  举报

导航