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程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊 具體的實現是從兩邊找,找到一對後交換 然後對兩邊分別使 用這個過...