標籤:style blog color 使用 os io strong 資料
【原理】首先在未排序的數列中找到最小(or最大)元素,然後將其存放到數列的起始位置;接著,再從剩餘未排序的元素中繼續尋找最小(or最大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 【複雜度和穩定性】
(1)選擇排序時間複雜度
選擇排序的時間複雜度是O(N2)。
假設被排序的數列中有N個數。遍曆一趟的時間複雜度是O(N),需要遍曆N-1。因此,選擇排序的時間複雜度是O(N2)。
(2)選擇排序穩定性
選擇排序是穩定的演算法,它滿足穩定演算法的定義。
演算法穩定性 -- 假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!
【代碼】
#include<iostream>using namespace std;template<class T>//模板的使用void selection_sort(T Array[],const int size);int main(){ int a[10]; cout<<"please input 10 numbers:"<<endl; for(int i=0;i<10;i++)//用於輸入內容 { cin>>a[i]; } selection_sort(a,sizeof(a)/sizeof(int));//調用函數,要注意sizeof(a)/sizeof(int)的意義 for(int j=0;j<10;j++)//輸出數組 { cout<<a[j]<<" "; } return 0;}template<class T>void selection_sort(T Array[],const int size){ int min;//確定最小值的數組下標 int temp;//中間值 for(int m=0;m<size-1;m++)//外層迴圈確定邊界(即迴圈的最大值) { min=m;//確定數組最小值的下標,將之前已排序的固定 for(int n=m+1;n<size;n++)//內層迴圈用於判斷哪個資料最小 { if(Array[n]<Array[min])//判斷最小值 { min=n;//確定最小值的數組下標 } } if(min!=m)//交換資料 { temp=Array[m]; Array[m]=Array[min]; Array[min]=temp; } }}