數據結構之排序一

</pre><span style="font-size:18px;">今天花了一些時間重新溫習了一下排序算法總的來說有以下幾種:</span></h3><h3></h3><h3></h3><p><span class="wmd-input-section"><span class="token p"></span><span class="token lf"></span><span class="token p"><span style="font-size:18px;">(1)冒泡排序最簡單粗暴的算法對數組進行從a[0]進行掃描,遇到比當前小的就換位置,掃描一遍後接着掃描第二遍,</span></span></span><span class="token lf"><span style="font-size:18px;">一直到掃描結束代碼如下</span></span></p><span class="token lf"></span><pre class="cpp" name="code"><span style="font-size:14px;"> void bubble_sort(int a[],int n){
    bool sorted = false;//整體排序標誌
    while(!sorted){
        sorted = true;//假定已經排序
        for(int i=0;i<n-1;i++){
            if(a[i+1]<a[i])
                swap(a[i],a[i+1]);
            sorted =false;
        }
    }
    //n--;這裏代表最後末尾必然是最大的數因此,可以縮短待排序的長度
 }</span>

冒泡排序比較重要的是設置監哨,來監控是否排序完畢。其時間複雜度o(n^2)

(2)選擇排序與冒泡比較相似與冒泡不相同的是選擇排序是在定位後,要找到一系列最小的纔會選擇交換

其時間複雜度與冒泡相同

void select_sort(int a[],int n){
    for(i=0;i<n-1;i++){
        int k = i;
        int key = a[i];
        for(int j=i+1;j<len;j++){//雙層循環遍歷每個值找出最小
            if(a[j]<key){
                k = j;
                key = a[j];//最小值位置以及值
            }
        }
        if(k!=i)
            swap(a[i],a[k])//若是不爲現在起始最小值那麼交換
    }
}

(3)插入(感覺好邪惡)排序法

insert 排序比較簡單,每一個都進行較,掃描一遍就可以搞定直接上代碼

void insert_sort(int a[],int length)
{
    for(int j=1;j<length;j++)
    {
        int key=a[j];//記錄下後面一個值
        int i=j-1;
        while(i>=0&&a[i]>key)//對前面進行掃描,把要排序的a[j]放置正確位置
        {
            a[i+1]=a[i];
            i--;
        }
        a[i+1]=key;//對後面這個值賦予新的值
    }
}

今天就寫這些明天再更




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章