1:插入排序
2:氣泡排序for(int i = 1;i < n;i++)
}
3:選擇排序for(int i = 0; i < n -1;i++)
}}
4:快速排序for(int i = 0; i < n -1;i++)
}swap(array,i,lowindex);
}
5:堆排序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);
}
堆排序的主要是建堆,然後依次移除頂層元素。
這是整形最大堆的實現
6:分配排序void heapsort(int a,int n)
}
分配排序的基本思想
它的缺點是只能對乙個從0到n-1的序列進行排序。for(int i = 0; i
< n; i++)
二:外排序(磁碟排序)
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 比較相鄰的元素。如果第乙個比...