排序演算法 1

2021-08-21 07:01:59 字數 2252 閱讀 2536

1---氣泡排序

(1)基本操作:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止;

(2)**實現:

2-1

//1---氣泡排序

//(初級版本-效率低):讓每乙個關鍵字都和它後面的每乙個關鍵字比較,如果大就交換,

// 這樣第乙個位置的關鍵字在第一次迴圈後一定變成最小值

void bubblesort0(elemtype* ar,int len)

} }}void swap(elemtype* ar, elemtype* br)//交換函式

void show(elemtype* ar, int len)//列印陣列元素

cout << endl;

}int main()

; int len = sizeof(ar) / sizeof(ar[0]);

bubblesort0(ar, len);//氣泡排序-1

cout << "氣泡排序-1結果:" << endl;

show(ar, len);

return 0;

}

2-2  正宗的冒泡演算法

//氣泡排序(公升序)

void bubblesort(elemtype* ar, int len)

} }}

2-3  氣泡排序的優化

當原有資料為:,除了第一和第二個元素需要交換後,已經變為正常順序,後面的比較是沒有必要的。因此可以對氣泡排序演算法進行優化:

//氣泡排序(優化版本)

void bubblesort2(elemtype* ar, int len)

num++;

} }cout<< "迴圈次數"<< num << endl;

}

經過這樣的改進,氣泡排序在效能上就有了一些提公升,可以避免因已經有序的情況下的無意義迴圈判斷。

(3)複雜度分析:

2---簡單選擇排序

(1)基本操作:就是通過n-i次關鍵字間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個記錄交換;

(2)**實現:

//簡單選擇排序/

void selectsort(elemtype* ar, int len)

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

{ int min = i; //第i個要確定的位置

for (int j = i+1; j < len;++j) //從i之後的資料中找到最小的

{ if (ar[j](3)複雜度分析:

從簡單排序的過程可以看出,它最大的特點就是交換移動資料的次數相對少,這樣就節約了時間。無論最好還是最差的情況,其比較次數都是一樣的多。交換情況,最好的情況交換次數為0,最差的情況交換次數為n-1次,基於最終的排序時間是比較與交換的次數總和,因此,總的時間複雜度為o(n2).儘管與氣泡排序同為o(n2),但簡單選擇排序的效能上還是要略優於冒泡。

3---直接插入排序

(1)基本操作:將乙個記錄插入到已經排好的有序表中,從而得到乙個新的、記錄數增1的有序表;

(2)**實現:

#includeusing namespace std;

typedef int elemtype;

//3---直接插入排序

void insertsort(elemtype* ar,int len)

{ for (int i = 1; i < len;++i) //第乙個元素(有序)不需要處理,so i=1開始

{ int tmp = ar[i]; //儲存將要插入的資料

int j = i - 1;

for (; j >=0;--j)//新插入的第i個元素與已經排好序的前i-1個元素比較

{ if (tmp(3)直接插入排序的空間複雜度:

從空間上來看,只需要乙個記錄的輔助空間,完成相應元素的交換;

(4)直接插入排序的時間複雜度:

最好的情況:需要排序的表就是有序的,只需要比較,完全不需要移動,時間複雜度為o(n);

最壞的情況:待排序是逆序的情況,此時需要比較和交換的次數都最大;

如果排序記錄是隨機的,那麼根據概率相同的原則,平均比較和移動次數約為n2/4;

因此,直接插入排序法的時間複雜度為o(n2);

(5)直接插入排序的適用場景:記錄本身就是有序的,只需要少量的插入操作,還有記錄比較少時,直接插入的優勢比較明顯;

排序 排序演算法1

所謂氣泡排序就是,一組資料,以遞增的順序來說明,從第乙個數data 0 開始,依次和後面的資料比較大小,如果data 0 大於當前位置上的數就和這個數交換位置並繼續和後面的數相比,如果遇到比自己大的數了,就不交換 下一次開始的位置是data 1 然後依次往後推。void myswap int num...

排序演算法 1 選擇排序演算法

這篇部落格分為兩個部分 選擇排序演算法基本思想 實現與解析 由於這個排序演算法比較簡單,因此這篇博文就不做過多解釋了 一.選擇排序演算法基本思想 1 選擇排序 小到大排序 1.遍歷所有未排序的元素 找到最小的那個元素 2.將這個元素與未排序序列的第乙個元素交換位置 3.當剩下乙個元素時 排序結束 o...

排序演算法 1

二 高階排序演算法 高階排序演算法中我們將只介紹這一種,同時也是目前我所知道 我看過的資料中 的最快的。它的工作看起來仍然象乙個二叉樹。首先我們選擇乙個中間值middle程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊 具體的實現是從兩邊找,找到一對後交換 然後對兩邊分別使 用這個過...