o(nlogn)
比如 5,8,5,2,9 ,選擇排序演算法排序,第一次找到最小元素 2,與第乙個 5 交換位置,那第乙個 5 和中間的 5 順序就變了,所以不穩定
比如序列 6,8,7,6,3,5,9,4,在經過第一次分割槽操作之後,兩個 6 的相對先後順序就會改變
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
/* 基於比較的排序
o(n*2)
氣泡排序 穩定
插入排序 穩定
選擇排序 不穩定
o(nlogn)
歸併排序 穩定
快速排序 不穩定
*/// 插入排序
void
insert_sort
(int arr,
int len)
arr[j+1]
=tmp;}}
// 氣泡排序
void
bubble_sort
(int arr,
int len)
}printf
("\n");
if(flag)
break;}
}// 選擇排序
void
select_sort
(int arr,
int len)
}swap
(arr[mini]
,arr[i]);
}}// 歸併排序
void
merge
(int arr,
int low,
int mid,
int high)
,c=0
;int p = low,q=mid+1;
while
(p<=mid&&q<=high)
else
}while
(p<=mid)tmp[c++
]=arr[p++];
while
(q<=high)tmp[c++
]=arr[q++];
memcpy
(arr+low,tmp,
sizeof
(int)*
(high-low+1)
);}void
merge_sort
(int arr,
int low,
int high)
void
merge_sort
(int arr,
int len)
// 快速排序
intpartition
(int arr,
int l,
int r)
else
}swap
(arr[p]
,arr[r]);
return p;
}void
quick_sort
(int arr,
int l,
int r)
void
quick_sort
(int arr,
int len)
intmain
(int argc,
char
* ar**)
;// insert_sort(arr,10);
// bubble_sort(arr,10);
// select_sort(arr,10);
// merge_sort(arr,10);
quick_sort
(arr,10)
;for
(int i=
0; i<
10; i++
)return0;
}
排序演算法筆記
1 直接插入排序 on 2,穩定的 將最左邊的作為乙個有序數列 設立哨兵,比較並插入已形成的有序數列中。2 希爾排序 時效不好分析,不穩定 直接插入排序的公升級版,調整不同的增量d 2 縮小增量排序,3 快速排序的思想是分治思想 概括來就是在分治的過程中,每次以最後乙個元素為基準,兩個index指向...
排序演算法筆記
一些總結的比較好的部落格 1.排序學習筆記 2.部分排序方法的整理 1 外層迴圈將排序好的除去 2 內層迴圈將沒排好的陣列進行前後比較大小,每經過乙個迴圈,最大的數都在最後面 穩定排序,時間複雜度o n2 void bubblesort vector int arr 第一層下來最大的值已經冒泡到最上...
演算法筆記 排序演算法 插入排序
插入排序的方法就類似於 在鬥地主發牌時,一張張牌地拿起並插入到自己手中的牌堆中。假設陣列 arr 有n個無序元素。每一次的插入就是在區間 0,i 中找到 arr i 1 對應的位置並插入。0,i 就相當於我們手中牌堆,arr i 1 就相當於下一張要插入的牌。直到沒有下乙個要插入的數,該陣列就變得有...