快速排序

//
//  main.c
//  code_0
//
//  Created by tqh on 2017/6/26.
//  Copyright © 2017年 tqh. All rights reserved.
//

#include <stdio.h>

int a[101],n;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left,int right){
    int i,j,t,temp;
    if(left > right){
        return;
    }
    temp = a[left]; //temp中存的就是基准数
    i = left;       //默认第一个吧
    j = right;      //第一次是最大数
    while (i != j) {
        
        //右边的数大于基准数,下标向左移动一位
        while(a[j] >= temp && i<j){
            j--;
        }
        //左边小于基准数,下标向右移动一位
        while(a[i] <= temp && i<j) {
            i++;
        }
        //不相同的时候将基数左右的值换了
        if (i < j) {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    
    //将i位置的值给左边的位置
    a[left] = a[i];
    
    //核心,i=j的时候,已经找到基数的位置
    a[i] = temp;
    
    //继续左边的处理,递归
    quicksort(left,i-1);
    //继续右边的处理,递归
    quicksort(i+1,right);

}


int main(int argc, const char * argv[]) {
    
    //读入数据
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    quicksort(1,n); //快速排序调用
    //输出排序后的结果
    for(int i=1;i<=n;i++){
        printf("%d ",a[i]);
    }
    getchar();getchar();
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容