快速排序是一种分治法,先找到一个中点,然后对分别对两段数据进行排序
#include <stdio.h>
void merge(int arr[], int start, int end);
int partition(int arr[], int start, int end);
void swap(int arr[], int x, int y);
int main(){
int array[8] = {10, 20, 30, 4, 5, 66, 7, 11},i;
merge(array, 0, 7);
for(i=0;i<8;i++){
printf("%d\t",array[i]);
}
printf("\n");
}
void merge(int arr[], int start, int end){
int m;
if(start<end){
m = partition(arr, start, end);
merge(arr, 0, m-1);
merge(arr, m+1, end);
}
}
int partition(int arr[], int start, int end){
int x = arr[start];
while(start<end){
while(start<end && arr[end]>=x)--end;
swap(arr, start, end);
while(start<end && arr[start]<x)++start;
swap(arr, start, end);
}
return start;
}
void swap(int arr[], int x, int y){
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}