記錄下十大排序演算法的核心及改進。
不穩定排序:快選擇謝爾頓。(快速、選擇、希爾、堆)
演算法分類:
2. 插入排序
3. 選擇排序
4. 歸併排序
二、非比較排序
for
(int i =
0; i < len -
1; i++
)}
簡單版,但如果最左邊的元素是最大值或最小值就會是最壞時間複雜度。
//一開始left = 0, right = len - 1;
void
quicksort
(int left,
int right,
float
&arr)
swap
(arr[i]
, arr[left]);
quicksort
(left, i -
1, arr)
;quicksort
(i +
1, right, arr)
;}
改進
//三值取中法
void
quicksort
(int left,
int right,
float
&arr)
swap
(arr[i]
, arr[left]);
quicksort
(left, i -
1, arr)
;quicksort
(i +
1, right, arr)
;}
int
main()
//測試
;quicksort(0
, arr.
size()
-1, arr)
;for
(int i =
0; i < arr.
size()
; i++
) cout<
<<
" ";
return0;
}
第一種:
int j, k;
for(
int i =
1; i < len; i++
) arr[j +1]
= k;
//把k填進去
}
第二種:
for
(int i =
0; i < len; i++
)}
當d = 1時,最後一次排序可以視為插入排序。
int i, j, d, temp, n = arr.
size()
; d = n /2;
//設定增量
while
(d >0)
//邊界條件
arr[j + d]
= temp;
} d = d /2;
//減小增量
}
參考:
for
(int i =
0; i < len -
1; i++
)}
void
heapadjust
(vector<
int>
& arr,
int k,
int end)}}
void
heapsort
(vector<
int>
&arr,
int len)
}
覺得太複雜的話應先從mergesort函式看起,然後再看merge函式。
void
merge
(int left,
int mid,
int right, vector<
int>
&arr)
delete
temp;
}void
mergesort
(int left,
int right, vector<
int>
&arr)
else
if(left == right)
return
;int mid =
(left + right)/2
;//找中點
mergesort
(left, mid, arr)
;//開始分組遞迴
mergesort
(mid +
1, right, arr)
;merge
(left, mid, right, arr)
;//排序
}
int
main()
//測試
;mergesort(0
, arr.
size()
-1, arr)
;for
(int i =
0; i < arr.
size()
; i++
) cout<
<<
" ";
return0;
}
十大排序演算法(C 實現)
排序演算法 平均時間複雜度最好情況最壞情況空間複雜度穩定性 氣泡排序 o n o n o n o 1 穩定選擇排序 o n o n o n o 1 不穩定插入排序 o n o n o n o 1 穩定希爾排序 o nlogn o o n o 1 不穩定歸併排序 o nlogn o nlogn o n...
十大排序演算法 C 實現
include stdafx.h include include include using namespace std 1氣泡排序 void bubblesort vector int v 2選擇排序 void seletionsort vector int v 3插入排序 void insert...
十大排序演算法(c )
1.氣泡排序 每一輪都從頭開始比較,比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小 ja j 1 if ischange break 2.插入排序 每一輪將當前數 a i 插入到前面已經排序好的合適位置,因此關鍵...