快速排序
以前就曾经接触过快排,这一次好好整理了一下思路,重写了一遍,记录一下。
/*
快速排序使用了分治的思想,所以搞明白一趟排序,剩下的以此类推很好理解。
首先设置一个参考数,一般都是第一个数,接下来从右到左扫描找一个比参考数大的数,再从左到右找一个比参考数小的数,他俩交换,直到参考数左面的数都比他小右面的数都比参考数大,第一趟排序就大功告成了。
下面是第一趟排序的例子:
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;
}