排序中主要有插入排序、氣泡排序、歸併排序、快速排序等
主要從空間消耗、時間複雜度、最差時間複雜度等方面考慮演算法的好處;
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...