<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    快速排序(quicksort)算法實現(xiàn)

        快速排序(quicksort)是分治法的典型例子,它的主要思想是將一個待排序的數(shù)組以數(shù)組的某一個元素X為軸,使這個軸的左側(cè)元素都比X大,而右側(cè)元 素都比X小(從大到小排序)。然后以這個X在變換后數(shù)組的位置i分為左右兩個子數(shù)組,再分別進行快速排序,直到子數(shù)組中只有一個元素為止。

    快速排序算法如下
    void quicksort(int A[], int p, int r)
    {
        
    int i;
        
    if(p < r)
        {
            i 
    = partition(A, p, r);
            quicksort(A, 
    0, i - 1);
            quicksort(A, i 
    + 1, r);
        }   
    }

        其中partition函數(shù)將得到X所在的位置i(在這里總以數(shù)組的最后一個元素為軸)。
    int partition(int A[], int p, int r)
    {
        
    int i = p - 1, j;
        
    for(j = p; j < r; j++)
        {
            
    if(A[j] >= A[r])
            {
                i
    ++;
                swap(
    &A[i], &A[j]);
            }
        }
        swap(
    &A[i + 1], &A[r]);
        
    return i + 1;
    }

        由于總是選擇數(shù)組的最后一個元素做為軸,因此可能出現(xiàn)X的左邊為n - 1或接近n - 1個元素,而右邊沒有元素,或元素很少的情況,即X最大或比較大。這樣使quicksort將出現(xiàn)最壞的情況,也就是時間復(fù)雜度為O(n^2)。因此partition可以采用隨機方式得到軸X的位置i。 這樣它的平均情況是非常好的(時間復(fù)雜度為O(nlogn)),也就是說,最壞情況很難出現(xiàn)。
    int new_random(int min, int max)
    {
        
    return (min + (int)(((float)rand()/RAND_MAX)*(max - min)));
    }

    int randomize_partition(int A[], int p, int r)
    {
        
    int i = new_random(p, r);
        swap(
    &A[i], &A[r]);
        
    return partition(A, p, r);
    }

    完整的代碼如下
    #include <stdio.h>
    #include 
    <stdlib.h>

    void out_int_array(int data[], int n)
    {
        
    int i;
        
    for(i = 0; i < n; i++)
        {
            printf(
    "%d ", data[i]);
        }
        printf(
    "\n");
    }
    void swap(int *a, int *b)
    {
        
    int x;
        x 
    = *a;
        
    *= *b;
        
    *= x;
    }

    int new_random(int min, int max)
    {
        
    return (min + (int)(((float)rand()/RAND_MAX)*(max - min)));
    }
    int partition(int A[], int p, int r)
    {
        
    int i = p - 1, j;
        
    for(j = p; j < r; j++)
        {
            
    if(A[j] >= A[r])
            {
                i
    ++;
                swap(
    &A[i], &A[j]);
            }
        }
        swap(
    &A[i + 1], &A[r]);
        
    return i + 1;
    }

    void quicksort(int A[], int p, int r)
    {
        
    int i;
        
    if(p < r)
        {
            i 
    = partition(A, p, r);
            quicksort(A, 
    0, i - 1);
            quicksort(A, i 
    + 1, r);
        }   
    }

    int randomize_partition(int A[], int p, int r)
    {
        
    int i = new_random(p, r);
        swap(
    &A[i], &A[r]);
        
    return partition(A, p, r);
    }

    void randomize_quicksort(int A[], int p, int r)
    {
        
    int i;
        
    if(p < r)
        {
            i 
    = randomize_partition(A, p, r);
            quicksort(A, 
    0, i - 1);
            quicksort(A, i 
    + 1, r);
        }   
    }

    int main()
    {
        
    int A[] = {4144-12512530};
        
    int B[] = {4144-12512530};
        out_int_array(A, 
    7);
        quicksort(A, 
    06);
        out_int_array(A, 
    7);
        printf(
    "--------------------------randomize-----------------------------\n");   
        srand((unsigned)time( NULL ));
        randomize_quicksort(B, 
    06);
        out_int_array(B, 
    7);
        
    return 0;
    }




    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2008-05-14 20:14 銀河使者 閱讀(6581) 評論(1)  編輯  收藏 所屬分類: algorithmC/C++

    評論

    # re: 快速排序(quicksort)算法實現(xiàn)  回復(fù)  更多評論   

    主函數(shù)里用了time()函數(shù),要加個頭文件吧,include<time.h>。小問題,謝謝共享
    2014-10-09 23:12 | 志在四方
    主站蜘蛛池模板: 污网站免费在线观看| 婷婷亚洲天堂影院| 中文字幕无线码免费人妻| 国产亚洲精aa在线看| 亚洲丁香色婷婷综合欲色啪| 亚洲国产精品成人网址天堂 | 免费视频淫片aa毛片| 久久精品免费视频观看| 国产99精品一区二区三区免费| 亚洲欧美不卡高清在线| 亚洲依依成人精品| 久久精品九九亚洲精品| 亚洲av永久无码精品国产精品| 亚洲国产小视频精品久久久三级| 成人免费视频国产| 成熟女人特级毛片www免费| 99在线精品视频观看免费| 91精品国产免费久久国语麻豆| 中文字幕免费视频精品一| 永久免费无码日韩视频| 国产精品亚洲五月天高清| 亚洲av综合av一区二区三区| 亚洲一本一道一区二区三区| 亚洲五月综合网色九月色| 亚洲一卡2卡4卡5卡6卡在线99| 麻豆亚洲AV永久无码精品久久| 亚洲av无码不卡| 久久精品国产亚洲AV网站| 亚洲αv久久久噜噜噜噜噜| 亚洲精品亚洲人成人网| 亚洲乱码日产一区三区| 国产亚洲高清不卡在线观看| 亚洲成Av人片乱码色午夜| 亚洲AV人无码激艳猛片| 久久精品国产亚洲AV无码麻豆 | 热re99久久6国产精品免费| 精品国产一区二区三区免费| 久久青草免费91线频观看不卡| 免费黄色电影在线观看| 最近的中文字幕大全免费8 | 91在线亚洲综合在线|