排序1——冒泡,選擇排序

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序算法,就是如何使得記錄按照要求排列的方法。排序算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。一個優秀的算法可以節省大量的資源。在各個領域中考慮到數據的各種限制和規範,要得到一個符合實際的優秀算法,得經過大量的推理和分析。
本文主要來講幾種排序方法

冒泡排序:

void bouble_sort(int *a, int len)
{
    int i,j;
    for(i = 0; i < len - 1; i++)
    {
        for(j = 0; j < len - 1 - i; j++)
        {
            if(a[j] > a[j + 1])
                swap(a, j, j + 1);
        }
    }
}

冒泡排序是重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
引申——雞尾酒排序:

void cho_sort(int *a, int len)
{
    int i;
    int left = 0;
    int right = len - 1;

    while(left < right)
    {
        for(i = left; i < right; i++)
        {
            if(a[i] > a[i + 1])
            {
                swap(a, i, i + 1);
            }
        }
        right--;

        for(i = right; i > left; i--)
        {
            if(a[i] < a[i - 1])
            {
                swap(a, i, i - 1);
            }
        }
        left++;
    }
}

雞尾酒排序也就是定向冒泡排序, 雞尾酒攪拌排序, 攪拌排序 (也可以視作選擇排序的一種變形), 漣漪排序, 來回排序 or 快樂小時排序, 是冒泡排序的一種變形。此演算法與冒泡排序的不同處在於排序時是以雙向在序列中進行排序。
選擇排序:

void select(int *a, int len)
{
    int i,j;
    int min;

    for(i = 0; i < len - 1; i++)
    {
        min = i;
        for(j = i + 1; j < len; j++)
        {
            if(a[min] > a[j])
            {
                min = j;
            }
        }

        if(min != i)
        {
            swap(a, i, min);
        }
    }
}

選擇排序是一種簡單直觀的排序算法。它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。

發佈了53 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章