2.用選擇排序對10個數進行排序

來源:互聯網
上載者:User

標籤: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;        }    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.