簡單選擇排序(直接選擇排序)
阿新 • • 發佈:2019-02-13
【分類】
選擇類排序
【基本思想】
每一趟從待排序的資料元素中選出最小(最大)的元素,順序放在待排序的數列最前,直到全部待排序的資料元素全部排完。
【特點】
資料結構:陣列
穩定性:不穩定
【過程】
初始關鍵字:『 8,5,2,6,9,3,1,4,0,7 』
第一趟排序後:0,『5,2,6,9,3,1,4,8,7』
第二趟排序後:0,1,『2,6,9,3,5,4,8,7』
第三趟排序後:0,1,2,『6,9,3,5,4,8,7』
第四趟排序後:0,1,2,3,『9,6,5,4,8,7』
第五趟排序後:0,1,2,3,4,『6,5,9,8,7』
第六趟排序後:
第七趟排序後:0,1,2,3,4,5,6,『9,8,7』
第八趟排序後:0,1,2,3,4,5,6,7,『8,9』
第九趟排序後:0,1,2,3,4,5,6,7,8,『9』
結果: 『 0,1,2,3,4,5,6,7,8,9 』
排序過程 巨集觀過程
【複雜度與輔助空間】
最差時間複雜度: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]);//放到已排序序列的末尾,該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序演算法 } }