Quick-sort

来源:互联网 发布:ie11调试器看不到js 编辑:程序博客网 时间:2024/06/10 13:55

 

#include <stdio.h>#include <string.h>#define ARR_LEN15static int    Arr[ ARR_LEN] = { 0,1,4,7,2,5,8,3,6,9, 7, 7, 8};static intArr_back[ ARR_LEN];static int    DF = 0;typedef int    INDEX;static void show_arr( int array[], INDEX left, INDEX right){        int    i;        printf(" [ left = %d]", left);        for( i=left; i<=right; i++ )        {                printf("%4d", array[i]);        }        printf("[right = %d]\n", right);}static void exchange( int *val1, int *val2){        int temp;        temp = *val1;        *val1 = *val2;        *val2 = temp;}static int pivot( int array[], INDEX left, INDEX right){        //reference value        INDEX    mInd = (left + right)/2;        //divide array into two parts        int    i = 0;        int    LLen = 0, RLen = 0;        for( i=left; i<=right; i++ )        {                DF++;                if( i==mInd)                {                        continue;                }                if( array[i]< array[mInd] )                {                        Arr_back[left + LLen] = array[i];                        LLen++;                }                else                {                        Arr_back[right - RLen] = array[i];                        RLen++;                }        }        Arr_back[left + LLen] =  array[mInd];        memcpy( array+left, Arr_back + left, (right-left + 1)*sizeof(int));        return left + LLen;}static void quick_sort( int array[], INDEX left, INDEX right){        static int t = 0;        printf(" %-4d [%3d,%3d]\n", t++,left, right);        if( right-left>=2)        {//继续向下分段                int    p;                p = pivot( array, left, right);                quick_sort( array, left, p-1);                quick_sort( array, p+1,  right);        }        else if( right -left ==1)        {//只有两个                DF ++;                if( array[left] > array[right])                {                        exchange( array + left, array + right);                }        }}int main( ){        show_arr( Arr, 0, ARR_LEN-1);        quick_sort( Arr, 0, ARR_LEN-1);        show_arr( Arr, 0, ARR_LEN-1);        printf(" Time Frequent: %d \n", DF);}


 

0 0
原创粉丝点击