选择排序(Select_Sort)
生活随笔
收集整理的這篇文章主要介紹了
选择排序(Select_Sort)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本思想
?每一趟從待排序的數據元素中選出最小(最大)的元素,順序放在待排序的數列最前,直到全部待排序的數據元素全部排完。
特點
?數據結構:數組
?穩定性:不穩定
過程
?初始關鍵字:『?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,『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)
{for(int i=0;i<n-1;i++)//i為已排序序列的末尾{for(int j=i+1;j<n;j++){if(a[j]<a[i]){int temp=a[i];a[i]=a[j];a[j]=temp;}}}
}
優化?
void select_sort(int a[],int n) {int 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]);//放到已排序序列的末尾,該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序算法} }JAVA版本
//選擇排序 public class SelectionSort {public static void main(String[] args) {int[] arr={1,3,2,45,65,33,12};System.out.println("交換之前:");for(int num:arr){System.out.print(num+" ");} //選擇排序的優化for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序int k = i;for(int j = k + 1; j < arr.length; j++){// 選最小的記錄if(arr[j] < arr[k]){ k = j; //記下目前找到的最小值所在的位置}}//在內層循環結束,也就是找到本輪循環的最小的數以后,再進行交換if(i != k){ //交換a[i]和a[k]int temp = arr[i];arr[i] = arr[k];arr[k] = temp;} }System.out.println();System.out.println("交換后:");for(int num:arr){System.out.print(num+" ");}}}?
總結
以上是生活随笔為你收集整理的选择排序(Select_Sort)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩具谜题
- 下一篇: 冒泡排序(Bubble_Sort)