日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

选择排序(Select_Sort)

發布時間:2024/10/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 选择排序(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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。