快速排序
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);
}