快速排序

2020-05-12  本文已影响0人  安知253
#include <stdio.h>
#include <stdlib.h>
#define INT "%d\n"
void swap(int *a,int *b);
void quick_sort(int *arr,int left,int right);
//解释说明:快速排序思维,分而治之策略,交换位置
int main()
{
    int arr[] = {22,5,10,29,12,3,99,56};
    int size = sizeof(arr)/sizeof(arr[0]);
    if(size > 1){
        quick_sort(arr,0,size-1);
    }
    for (int i = 0; i < size; ++i) {
        printf(INT,arr[i]);
    }
    return 0;
}

void swap(int *a,int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

void quick_sort(int *arr,int left,int right){
    //{22,5,10,29,12,3,99,56}
    //以22为基准,跟56比较,比56小,则往右right--,直到3比22小,交换left和right的值,交换完left+1
    //结果:{3,5,10,29,12,22,99,56}
    //继续左边的跟22比较,如果比22大,放右边,5比22小,left++,直到29,交换left和right的值,交换完right-1
    int i = left;
    int j = right;
    int middle = arr[left];
    if (left >= right)  //如果low >= high说明排序结束了
    {
        return ;
    }
    while(left < right){
        while(middle <= arr[right] && left < right){
            --right;
        }
        if(middle > arr[right]){
            swap(&arr[left],&arr[right]);
            ++left;
        }
        while(middle >= arr[left] && left > right){
            --left;
        }
        if(middle < arr[left]){
            swap(&arr[right],&arr[left]);
            --right;
        }
    }
    quick_sort(arr,i,left-1);
    quick_sort(arr,left+1,j);
}
上一篇下一篇

猜你喜欢

热点阅读