快速排序

快速排序

以前就曾經接觸過快排,這一次好好整理了一下思路,重寫了一遍,記錄一下。

/*
快速排序使用了分治的思想,所以搞明白一趟排序,剩下的以此類推很好理解。
首先設置一個參考數,一般都是第一個數,接下來從右到左掃描找一個比參考數大的數,再從左到右找一個比參考數小的數,他倆交換,直到參考數左面的數都比他小右面的數都比參考數大,第一趟排序就大功告成了。
下面是第一趟排序的例子:
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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章