常見的排序演算法
根據時間複雜度的不同,可分為三類
1.o(n²) 的排序演算法
2.o(n log n) 的排序演算法
3.線性的排序演算法
氣泡排序(bubble sort)
步驟1.比較相鄰的元素,如果第乙個比第二個大就交換。一次迴圈下來,最大值在陣列的末尾。
2.因此外迴圈,從0到末尾,末尾每次變短一位。
3.如果剩下的都有序了呢?也就是不用再進行迴圈了,放置乙個flag,如果一直沒有交換,也就是flag值不變,即可跳出迴圈。
void
bubble_sort
(vector<
int>
&a)}
if(flag ==0)
break
;//全程無交換
}}
選擇排序(selection sort)
如果某個元素,位於正確的最終位置上,它不會被移動,選擇排序,每次交換一對元素,至少有乙個會被移動到最終位置上。
步驟在未排序的序列中,找到最小(大)的玄素。放入已排序序列的最後乙個位置
void
selection_sort
(vector<
int>
&a)swap
(a[minindex]
, a[i]);
}}
插入排序(insertion sort)步驟
從第乙個元素開始,該元素可以認為已經被排序
取出下乙個元素,在已排序序列中,從後向前比較,如果前一張比當前的大,將前一張,向後移
最後全部移動完,在當前位置放入取出的元素
void
insertion_sort
(vector<
int>
&a) a[i]
= temp;
}}
歸併排序(merge sort)
是「分治法」的典型應用
步驟
void
mergesort
(vector<
int>
&arr)
void
mergesort
(vector<
int>
&arr,
int l,
int r)
void
merge
(vector<
int>
&nums,
int l,
int m,
int r)
else
}while
(p1 <= mid) help[i++
]= nums[p1++];
while
(p2 <= r) help[i++
]= nums[p2++];
for(
int i =
0; isize()
; i++
)}
C 排序演算法整理
from 菜鳥程式設計 參考 十大經典排序演算法 include using namespace std template typename t 整數或浮點數皆可使用,若要使用類 class 或結構體 struct 時必須過載大於 運算子 一次冒泡 for int i 0 i len 1 i 氣泡排...
排序演算法整理 c語言
1.選擇排序 選擇排序就是找到它的最小元素,然後和第乙個元素交換,將最小元素放到它在有序表中的最終位置上。然後從第二個元素開始掃瞄列表,找到後面n 1個元素中的最小元素,再和第二個元素比較,這樣到最後就已經排完序了。其時間複雜度是 o n 2 附程式 選擇排序,2018.06.17 輸入亂序的陣列n...
排序 排序演算法整理
經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...