基本思想
每一趟在後面n-i+1個待排序的元素中找到最小的然後放置在第i個位置,就是位置0-length-1下標相當於是已經知道順序的了,然後在序列裡找每組序列的最小元素放在這個已知位置就可以了。
基本思想
每一趟排序記錄當前元素的最終位置,設定乙個變數,每當要交換的時候,隨時更改變數的值
#include
using
namespace std;
void
easychoicesort
(int
*array,
int length)
;int main ();
int length=10;
easychoicesort
(array,length)
; cout<<
"result1:"
;for
(int i=
1;i<=
10;i++
) cout<<<
" ";
cout
}void
easychoicesort
(int
*array,
int length)
//一開始沒加這句,其實無形之中提公升了效率,如果位置都相同的話,就不用再交換一次了
if(location!=i)
}}
簡單排序演算法效能分析
效能分析
空間o(1)
時間簡單排序的過程中,元素移動的操作次數很少,不會超過3(n-1)次,最好的情況是移動0次,此時對應的表已經有序;但元素間比較的次數與序列的初始狀態無關,始終是n(n-1)/2次,所以時間複雜度為o(n2)
穩定性不穩定
適用性順序表,但是如果給鍊錶其實也可以
堆排序特點
在排序過程中,將整個順序表看成一棵完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係,在當前無序區中選擇關鍵字最大(或最小)的元素。
堆的定義
大根堆最大元素存放在根結點中,且對任意非根結點,它的值小於或等於其雙親結點
小根堆最小元素存放在根結點中,且對任意非根結點,它的值大於或等於其雙親結點
相關演算法思路
#include
using
namespace std;
void
buildmaxheap
(int
*array,
int length)
;void
adjustdown
(int
*array,
int k,
int length)
;void
heapsort
(int
*array,
int length)
;void
adjustup
(int
*array,
int length)
;void
deleteelement
(int
*array,
int length)
;void
insertelement
(int
*array,
int length,
int key)
;int main ();
int length=8;
buildmaxheap
(array, length)
; cout<<
"resultinitial:"
;for
(int i=
1;i<=
8;i++
) cout<<<
" ";
cout
(array, length)
; cout<<
"resultdelete:"
;for
(int i=
1;i<=
7;i++
) cout<<<
" ";
cout* heapsort(array, length);
cout<<"result1:";
for(int i=1;i<=8;i++)
cout}//初始建堆
void
buildmaxheap
(int
*array,
int length)
}//先從巨集觀上看不要陷入演算法的細節
//函式adjustdown是為了找到k的最終位置,而在尋找的過程中把中間不恰當的位置都掉換了
void
adjustdown
(int
*array,
int k,
int length)
} array[k]
=array[0]
;//找到最終k的位置
}//堆排序演算法
//第乙個位置排列的一定是最大的元素,利用最後乙個元素與第乙個元素交換,然後向下調整
//這樣最後乙個位置放置的就是整個序列中最大的元素,然後依次遞減
void
heapsort
(int
*array,
int length)
}//堆中元素刪除演算法
void
deleteelement
(int
*array,
int length)
//堆中元素插入操作
void
insertelement
(int
*array,
int length,
int key)
//向上調整堆的演算法
void
adjustup
(int
*array,
int length)
array[length]
=array[0]
;}//明確當前操作的是哪個結點,真正對結果有影響的是哪個結點,不要被其他部分干擾
堆排序演算法效能分析
效能分析
時間建堆時間為o(n),之後有n-1次向下調整操作,每次調整的時間複雜度為o(h)【樹的高度】,在最好、最壞、平均情況下時間複雜度為o(nlog2n)
空間o(1)
穩定性不穩定
適用性利用了完全二叉樹的性質,用順序表儲存
排序演算法(三) 選擇排序
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始 末尾 位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法 比如序列 5,5,3 第一次就將第乙個 5 與 3 交換,導致第乙個5挪動...
排序演算法 (三)選擇排序
author 閆振興 contact 1753502691 qq.com datetime 2020 5 23 18 14 software pycharm 檔案說明 encoding utf 8 選擇排序 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置。再從剩餘未排序元素中繼續尋找...
排序演算法(三) 選擇排序演算法
選擇排序演算法首先從序列中選擇乙個元素arr i 通常是第乙個 作為當前最小值,然後把arr i 依次與序列中arr i 之後的元素作比較,如果有元素小於arr i 的,就讓它跟arr i 交換。然後再選擇arr i 1 作為下一輪比較的最小值,然後繼續比較.選擇排序演算法原理很簡單,就是每次把未排...