快速排序思想+實現(Goal:手寫快排)

轉載於:http://blog.csdn.net/morewindows/article/details/6684558ios

該方法的基本思想是:windows

1.先從數列中取出一個數做爲基準數。ui

2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。spa

3.再對左右區間重複第二步,直到各區間只有一個數。.net

 

雖然快速排序稱爲分治法,但分治法這三個字顯然沒法很好的歸納快速排序的所有步驟。所以個人對快速排序做了進一步的說明:挖坑填數+分治法code

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
void quick_sort(int s[], int l, int r)
{
    if(l<r)
    {
    int i = l, j = r;
    int x = s[i];
    while(i<j)
    {
        while(s[j]<=x&&i<j)
            j--;
        if(i<j)
            s[i++]=s[j];
        while(s[i]>x&&i<j)
            i++;
        if(i<j)
            s[j--]=s[i];
    }
    s[i]=x;
    quick_sort(s,l,i-1);
    quick_sort(s,i+1,r);
    }
}

int main()
{
    int n = 5;
    int a[n];
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    quick_sort(a,0,n-1);
    for(int i=0; i<n; i++)
        printf("%d ", a[i]);
    free(a);
    return 0;
}
相關文章
相關標籤/搜索