快速排序

来源:互联网 发布:php魔术方法析构方法 编辑:程序博客网 时间:2024/06/14 09:39

                                                             快速排序

排序思想:1.首先选定一个标志值(一般选第一个)value,比其大的放在右边,比其小的放在左边;

                   2.再分别递归处理value左边和右边的集和

时间复杂度:o(n^log2n)   

稳定性:不稳定


例如:              

    // value = 12, i遍历左边的值,j遍历右边的值;直到i=j的时候结束遍历,此时value左边的值全比右边的小,一次递归结束;

    //
    // 把比12小的放在左边,比12大的放在右边
    // 
    // 12  3  45  65  18  5  2  11  4 
    //  i                           j
    // 
    // 4   3  45  65  18  5  2  11  4
    // i                            j
    //
    // 4   3  45  65  18  5  2  11  45
    //        i                  j    
    //
    // 4   3  11  65  18  5  2  11  45
    //        i                  j
    //
    // 4   3  11  65  18  5  2  65  45
    //            i              j
    //

    // 4   3  11  2  18  5  2  65  45
    //            i         j
    //         
    // 4   3  11  2  18  5  18  65  45
    //               i      j 
    //
    // 4   3  11  2  5  5  18  65  45
    //               i  j
    //
    // 4   3  11  2  5  12  18  65  45
    //                  ij



//快速排序接口函数

void quick_sort(int *array, int length)

{
    if(array != NULL && length > 1){
        Quick_sort(array, 0, length - 1);
    }

}


//快速排序内函数

static void Quick_sort(int *array, int begin, int end)

{
    int i = begin;
    int j = end;
    int value = array[i];   //作为判决左右部分的值
    
    if(begin < end){   //快排递归结束条件
                                  j
        while(i < j){   //i和j相等说明整个序列遍历结束                                     

             while(j > i && array[j] > value){    //从后向前找比value小的值放在i的位置
                 j--;
             }
            
             if(j > i){
                 array[i++] = array[j];
             }
          
             while(i < j && array[i] < value){     //从前向后找比value大的值放在j的位置
                 i++;
             }
            
             if(i < j){
                 array[j--] = array[i];
             }
        }    
        array[i] = value;

        //递归处理i的左部分和右部分
        Quick_sort(array, begin, i - 1);
        Quick_sort(array, i + 1, end);
    }
}



0 0
原创粉丝点击