Loading

快速排序

------------恢复内容开始------------

主要思路:
1、确定基准位置,一般取第一个,确定左、右指针,初始左指针一般为首位置,右指针一般为尾位置。
2、左指针寻找大于基准值的数,右指针寻找小于基准值的数,左右指针基于此条件向左向右移动
3、左右指针相遇的位置 与 基准位置的值进行交换,所以此时 基准值左边都是小于基准值的,右边都是大于基准值的
4、递归此函数重复此过程
5、递归前先判断 起始位置要小于结束位置
核心思想就是要划分区域




#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
void QuickSort(int num[],int first,int last){
    int pivot,right,left;
    if (first < last) {
        right = last;
        left = first;
        pivot = first;
        while (left < right) {
            while (num[left] <= num[pivot] && left < last) {
                left++;
            }
            while (num[right] > num[pivot]) {
                right--;
            }
            if (left < right) {
                int temp = num[left];
                num[left] = num[right];
                num[right] = temp;
            }
        }
        int temp = num[pivot];
        num[pivot] = num[right];
        num[right] = temp;
        QuickSort(num, first, right - 1);
        QuickSort(num, right + 1, last);
    }
}
int main(){
    int num[] = {1,5,8,9,7,6,54,4};
    //二分
    int len = -1;
    for(int i = 0;num[i]; i++){
        ++len;
    }
    printf("%d\n",len);
    QuickSort(num,0,len - 1);
    for(int i = 0; i < len ; i++){
        printf("%d\t",num[i]);
    }
    return 0;
}

------------恢复内容结束------------

posted @ 2022-06-30 19:59  JiangPerson  阅读(31)  评论(0)    收藏  举报