快排

【问题描述】

  请用"快速排序算法”为若干个小动物的身高进行从低到高的排序。

  输入: 第一行,一个整数n ,表示有n个数据,接下来n个大小不同的数字。

  输出: 递增序列。

【样例输入】

  7

  5 3 6 2 1 7 4

【样例输出】

  1 2 3 4 5 6 7

#include<iostream>
using namespace std;

// 数组划分
int divide(int a[], int start, int end){
    int current=a[start];
    int i=start+1; // 下一个元素位置。 
    int j=end; // 最后一个元素位置。
    // 5 3 7 4 9 1 10
    // 4 3 1 5 9 7 10
    while(i<=j){ 
        // 寻找比current大的数。 
        while(i<=j&&a[i]<=current) i++;
        // 寻找比current小的数。 
        while(i<=j&&a[j]>current) j--;
        if(i<j){
            swap(a[i],a[j]);
            i++;
            j--;
        }
    } 
    swap(a[start], a[j]); 
    return j;
} 

void quickSort(int a[], int start, int end){
    if(start>=end) return;
    int middle=divide(a, start, end);
    // 左边的数据开始排序
    quickSort(a, start, middle-1);
    quickSort(a, middle+1, end);
    return;
}

int main(){
    int a[101], n;
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>a[i];
    }
    quickSort(a, 1, n);
    for(int i=1; i<=n; i++){
        cout<<a[i]<<" ";
    }
    return 0;
} 

 

posted @ 2022-08-10 07:20  Hi,小董先生  阅读(219)  评论(0)    收藏  举报