挑戰二 第三章初等排序

2021-08-18 02:10:11 字數 1268 閱讀 6354

基礎實在差的太多,(貼的**太多,做的思考太少,和大佬差距越來越大,現在開始刷書也不知道到底來不來得及)

真是應了那句話,無論什麼事,在結束之前,最壞的結果不過就是重頭再來。

第三章初等排序

3.1挑戰問題之前——排序

排序主要注意三點:

1.複雜度與穩定性(穩定是指當資料中存在2個或者2個以上鍵值相等的元素時,這些元素在排序處理前後順序不變。)

2.除儲存資料的陣列以外是否還需要額外記憶體

3.輸入資料的特徵是否會對複雜度造成影響

3.2插入排序

陣列分為兩部分:一部分為已排序部分,一部分為未排序部分。

執行下述,直至未排序部分消失:

1.取出未排序部分的開頭賦給變數v;

2.在已排序的的部分,將所有比v大的元素向後移動乙個單位。

3.將以取出的元素插入空位

模板

int csort(int a,int n)

a[j+1]=v;

print(a,n);

}}

3.3氣泡排序

重複執行下述處理,直到陣列中不包含順序相反的相鄰元素

從陣列末尾開始依次比較相鄰的兩個元素,如果大小相反則交換位置。

模板int bsort(int a,int n){

int flag=1;

int sw=0;//記錄交換次數(又稱為反序數或逆序數,可用於體現數列的錯亂程度)

while(flag){

flag=0;

for(int j=n-1;j>=1;j--){

if(a[j]3.4選擇排序

每次找出陣列中最小的數字,放置相應位置,完成排序

重複執行n-1次下述處理

1.找出未排序部分的最小值minj;

2.將minj位置的元素和未排序部分的起始元素進行交換;

模板int ssort(int a,int n){

int minj;

for(int i=0;i小結:冒泡與選擇相比,乙個從區域性入手減少逆序數,乙個全域性逐個選擇最小值,思路不同,但是都是「通過i次外層迴圈,從資料中求出i個最小值」 相對地,插入排序是通過i次外層迴圈,直接將原陣列的i個元素重新排序。

三種排序方法都是n²的時間複雜度 插入和冒泡均是穩定排序,選擇排序為不穩定排序插入排序的優勢在可以快速處理相對有序的數列.

3.5穩定排序(沒啥好說的,選擇排序不穩定...)

3.6希爾排序

其實是插入排序的公升級版?按一定區間長度排序,然後再細化?有點難...放一放..還有一篇的解釋似乎挺詳細.

第三章 初等排序

1 aizu alds1 1 a insertion sort include includeusing namespace std int n,a 110 void print void insertsort a j 1 tmp print int main 2 aizu alds1 2 a bu...

第三章 排序檢索資料

本章介紹使用select語句的order by子句,根據需要排序檢索出的資料 1.子句 clause sql語句由子句構成。乙個子句通常由乙個關鍵字加上所提供的資料組成。2.order by 子句應保證它是select語句中 最後一條子句 該子句的次序不對將會出現錯誤訊息。3.通常,order by...

第二章 第三章

列舉和 define巨集的區別 define巨集常量是在預編譯階段進行簡單替換,列舉常量則是在編譯的時候確定其值。一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。列舉可以一次定義大量相關的常量,而 define巨集一次只能定義乙個。聯合體 unionperdata 定義了乙個名為perdat...