快速排序
以前就曾經接觸過快排,這一次好好整理了一下思路,重寫了一遍,記錄一下。
/*
快速排序使用了分治的思想,所以搞明白一趟排序,剩下的以此類推很好理解。
首先設置一個參考數,一般都是第一個數,接下來從右到左掃描找一個比參考數大的數,再從左到右找一個比參考數小的數,他倆交換,直到參考數左面的數都比他小右面的數都比參考數大,第一趟排序就大功告成了。
下面是第一趟排序的例子:
5 4 7 2 4 8 9 1 0 3
5 4 3 2 4 8 9 1 0 7
5 4 3 2 4 0 9 1 8 7
5 4 3 2 4 0 1 9 8 7
1 4 3 2 4 0 5 9 8 7
*/
#include <stdio.h>
void quick_sort(int arr[],int start,int end)
{
int i,j,t,temp;
if(start >= end){
return;//程序的出口
}
temp = arr[start];
i = start;
j = end;
while(i != j)
{
while(arr[j] >= temp && i < j)
j--;
while(arr[i] <= temp && i < j)
i++;
if(i < j)
{
t = arr[i];
arr[i] = arr[j]; //找到的兩個數交換
arr[j] = t;
}
}
arr[start] = arr[i];
arr[i] = temp;
quick_sort(arr,start,i-1);
quick_sort(arr,i+1,end);
}
int main(void)
{
int arr[] = {5,4,7,2,4,8,9,1,0,3};
quick_sort(arr,0,9);
int i;
for(i = 0 ; i < 10 ; i++)
{
printf("%d",arr[i]);
}
return 0;
}