在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數據分析&挖掘/ 選擇排序
hash表
單詞統(tǒng)計
鏈表排序
查找
可變參數
爬樓梯
內存
prim算法 中
線性結構的處理
數據選擇
prim算法 上
循環(huán)單向鏈表
基數排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉
函數堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊列
循環(huán)和遞歸
快速排序
尋找丟失的數
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數計算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結構
最大公約數、最小公倍數
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個數
字符串查找 中篇
哈夫曼樹 上
合并排序
回數
選擇排序
哈希二叉樹
通用數據結構
“數星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個數統(tǒng)計

選擇排序

選擇排序是和冒泡排序差不多的一種排序。和冒泡排序交換相連數據不一樣的是,選擇排序只有在確定了最小的數據之后,才會發(fā)生交換。怎么交換呢?我們可以以下面一組數據作為測試:

2, 1, 5, 4, 9

第一次排序:1, 2, 5, 4, 9

第二次排序: 1, 2, 5, 4, 9

第三次排序: 1, 2, 4, 5, 9

第四次排序: 1, 2, 4, 5, 9

a)算法步驟

那么從上面的排序步驟可以看到,選擇排序應該是這樣的:

(1)每次排序的時候都需要尋找第n小的數據,并且和array[n-1]發(fā)生交換

(2)等到n個數據都排序好,那么選擇排序結束。

b)排序代碼

void select_sort(int array[], int length)
{
    int inner, outer, index, value, median;

    if(NULL == array || 0 == length)
        return;

    for(outer = 0; outer < length - 1; outer ++)
    {
        value = array[outer];
        index = outer;

        for(inner = outer +1; inner < length; inner ++){
            if(array[inner] < value){
                value = array[inner];
                index = inner;
            }
        }

        if(index == outer)
            continue;

        median = array[index];
        array[index] = array[outer];
        array[outer] = median;
    }
}

c) 測試用例

void print(int array[], int length)
{
    int index;
    if(NULL == array || 0 == length)
        return;

    for(index = 0; index < length; index++)
        printf("%d", array[index]);
}

void test()
{
    int data[] = {2, 1, 5, 4, 9};
    int size = sizeof(data)/sizeof(int);
    select_sort(data, size);
    print(data, size);
}

總結:

1)其實測試的方法很多,打印就是比較不錯的方式,不過只適合測試用例比較少的情形

2)算法可以先在草稿紙上驗證一遍,然后開始編程