幾種常見的排序

2021-07-29 20:17:26 字數 1402 閱讀 4520

1:插入排序

for(int i = 1;i < n;i++)

}

2:氣泡排序

for(int i = 0; i < n -1;i++)

}}

3:選擇排序

for(int i = 0; i < n -1;i++)

}swap(array,i,lowindex);

}

4:快速排序

void swap(int a,int i,int j)

int partition(int a,int l,int r,int pivot)while(l < r);

return l;

}void quicksort(int a,int i,int j)

//find pivot element

int pivotindex = (i+j)/2;

//需要把中軸值換到最後,partition執行之後再換回中軸值,

//這樣可以保證我們是按中軸值將被排序陣列劃分成兩個部分

swap(a,pivotindex,j);

int k = partition(a,i-1,j,a[j]);

swap(a,k,j);

quicksort(a,i,k-1);

quicksort(a,k+1,j);

}

5:堆排序

堆排序的主要是建堆,然後依次移除頂層元素。

這是整形最大堆的實現

void heapsort(int a,int n)

}

6:分配排序

分配排序的基本思想

for(int i = 0; i

< n; i++)

它的缺點是只能對乙個從0到n-1的序列進行排序。

二:外排序(磁碟排序)

1:演算法流程

a:把原始檔案劃分成兩個大小相等的順串檔案

b:從每個順串檔案中抽取出乙個塊,讀入輸入緩衝區中

c:從每個輸入緩衝區中取出第一條記錄,把它們按照安排好的次序寫入乙個順序輸出緩衝區中。

d:從每個輸入緩衝區中取出第二條記錄,把它們按照安排好的次序寫入另乙個順串輸出緩衝區中。

e:在兩個順串輸出緩衝區之間交替輸出,重複這些步驟直至結束。當遇到乙個輸入塊的末尾時,從相應的輸入檔案中讀入第二個塊。當乙個順串輸出緩衝區已滿時,把它寫回到 相應的輸出檔案。

f:使用原始輸出檔案作為輸入文件,重複b-e步驟。在第二趟掃瞄中。每個輸入順串檔案的前兩條記錄應經排好次序。這樣就可以把這兩個順串歸併成乙個長度為4的順串輸出了。

g:對順串檔案的每一趟掃瞄都會產生更大的順串,直到最後剩下乙個順串。

常見的幾種排序

常見的排序 選擇排序 直接選擇排序 堆排序 交換排序 氣泡排序 直接交換排序 插入排序 直接插入排序 shell排序 折半插入排序 歸併排序 基數排序 1.選擇排序 1.1直接選擇排序 選擇排序 直接選擇排序 每迴圈一次取出其中最大或者最小的乙個 插入到靠前或者靠後的位置 當然第一次從0開始,第二次...

常見的幾種排序

前言 最近聽公尺老師講了一遍排序,之前上課老師也講過,這次又聽了一遍,對排序有了更進一步的認識。接下來介紹一下最常見的幾種排序,以及自己對排序的理解。插入排序 插入排序包括 直接插入排序與shell排序 1.直接插入排序 概念 通過線性搜尋來確定待插入記錄的位置 演算法 圖中每一行的資料表示插入了第...

常見的幾種排序

一 氣泡排序 二 直接選擇排序 三 直接插入排序 四 希爾排序 五 快速排序 快速排序三種找基準方式及兩種優化 六 堆排 七 歸併排序 時間複雜性 一般平均是o n 2 最好的情況是o n 最壞的情況是o n 2 空間複雜性 o 1 穩定性 穩定排序。氣泡排序的原理 1 比較相鄰的元素。如果第乙個比...