1. 程式人生 > >簡單選擇排序(直接選擇排序)

簡單選擇排序(直接選擇排序)

【分類】

 選擇類排序

【基本思想】

 每一趟從待排序的資料元素中選出最小(最大)的元素,順序放在待排序的數列最前,直到全部待排序的資料元素全部排完。

【特點】

 資料結構:陣列

 穩定性:不穩定

【過程】

 初始關鍵字:『 852693140

 第一趟排序後:0,『526931487

 第二趟排序後:01,『26935487

 第三趟排序後:012,『6935487

 第四趟排序後:0123,『965487

 第五趟排序後:01234,『65987

 第六趟排序後:

012345,『6987

 第七趟排序後:0123456,『987

 第八趟排序後:01234567,『89

 第九趟排序後:012345678,『9

 結果:           012345678

          

   排序過程           巨集觀過程

【複雜度與輔助空間】

 最差時間複雜度:O(n^2)

 最優時間複雜度:O(n^2)

 平均時間複雜度:O(n^2)

 所需輔助空間:O(1)

【實現方法】

 雙重迴圈,外層i控制當前序列最小(最大)值存放的陣列元素位置,內層迴圈j控制從i+1到n序列中選擇最小的元素所在位置k。

【源程式】

void select_sort(int a[],int n)
{
	int i,j,min;
    for(int i=0;i<n-1;i++)//i為已排序序列的末尾
	{
        min=i;
        for(int j=i+1;j<n;j++)//未排序序列
            if(a[j]<a[min])//找出未排序序列中的最小值
                min=j;
        if(min!=i)
            swap(a[i],a[min]);//放到已排序序列的末尾,該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序演算法
    }
}