快速排序

void quick(int *data ,int begin,int end);
int find_mid(int *data, int i, int j, int k);
int exchange(int *data, int a, int b);


int main()
{
        int buf[10] = {10,3,2,10,545,13,12123,5,6,2};
        int buf1[2]= {45,3};
        quick(buf,0,9);
        for (int i=0; i<10;i++)
        {
                printf("%d\n",buf[i]);
        }
}


int exchange(int *data, int a, int b)

{
        int tmp = 0;
        tmp = data[a];
        data[a]=data[b];
        data[b]=tmp;
}
int find_mid(int *data, int i, int j, int k)
{
        int big = data[i]>data[j]?i:j;
        if (data[k] >= data[big])
                return big;
        if (data[k] >= data[i] || data[k] >= data[j])
                return k;
        if (data[i] == big)
                return j;
        else
                return i;
}
void quick(int *data, int begin, int end)
{
        if (begin >= end)
                return;
        int mid = find_mid(data,begin,begin+(end-begin)/2,end);
        exchange(data,begin,mid);
        int i = begin+1, j = end;
        while( i <= j)
        {
                while( data[i] <= data[mid] && i < j )
                {
                        i++;
                }
                while( data[j] >= data[mid] && j >= i)
                {
                        j--;
                }
                if ( i >= j)
                        break;
                exchange(data,i,j);
        }
        exchange(data,j,begin);
        quick(data,begin,j-1);
        quick(data,j+1,end);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章