演算法複習 排序

2021-08-04 23:04:14 字數 1531 閱讀 3196

排序中主要有插入排序、氣泡排序、歸併排序、快速排序等

主要從空間消耗、時間複雜度、最差時間複雜度等方面考慮演算法的好處;

1.插入排序

插入排序是一種簡單直觀的排序演算法。它的工作原理非常類似於我們抓撲克牌

對於未排序資料(右手抓到的牌),在已排序序列(左手已經排好序的手牌)中從後向前掃瞄,找到相應位置並插入。

插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

int a = ;// 從小到大插入排序

int n = sizeof(a) / sizeof(int);

int i, j, get;

for (i = 1; i < n; i++) // 類似抓撲克牌排序

a[j + 1] = get;// 直到該手牌比抓到的牌小(或二者相等),將抓到的牌插入到該手牌右邊(相等元素的相對次序未變,所以插入排序是穩定的)

}

2.氣泡排序

int a[10]=;  

for(int i=0;i<10;i++)

for(int j=9;j>=i;j--)

while (i <=mid) //表示陣列a(mid,high]已經全部歸入temp陣列中去了,而陣列a[low,mid]還有剩餘

temp[k++] = a[i++]; //將陣列a[low,mid]剩下的值,逐一歸入陣列temp

while (j <=high) //表示陣列a[low,mid]已經全部歸入到temp陣列中去了,而陣列(mid,high]還有剩餘

temp[k++] = a[j++]; //將陣列a(mid,high]剩下的值,逐一歸入陣列temp

for (i = 0; i < k; i++) //將歸併後的陣列的值逐一賦給陣列a[low,high]

a[low + i] = temp[i]; //注意,應從a[low+i]開始賦值

}//二路歸併(遞迴實現)

void mergesort(int * a, int low, int high, int * temp)

}/*----------測試**----------*/

int main()

; int la = sizeof(a) / sizeof(a[0]);

int * p = new int[la];

mergesort(a, 0, la - 1, p);

for (int i = 0; i < la; i++)

cout << endl;

_getch();

//deletep;

}

排序演算法複習

參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...

演算法複習 排序

穩定的排序 排序之後,源資料中相同的資料相對位置不會發生改變 不穩定的排序 反之。test array 12,10,1,5,10 foreach test as val for i 0 i test i bin test222,58,0,count test222 1 function bin da...

排序演算法複習

created by nickwang on 2019 8 24.直接插入排序 o n 2 折半插入排序 o n 2 氣泡排序 o n 2 快速排序 o nlogn 選擇排序 o n 2 堆排序 o nlogn 歸併排序 o nlogn ifndef c sort h define c sort h...