構建者模式的實際使用
阿新 • • 發佈:2022-05-25
基本介紹
選擇式排序也屬於內部排序法,是從欲排序的資料中,按指定的規則選出某一元素,再依規定交換位置後達到排序的目的。
選擇排序思想:
選擇排序(select sorting)也是一種簡單的排序方法。它的基本思想是:第一次從 arr[0]~arr[n-1]中選取最小值, 與 arr[0]交換,第二次從 arr[1]~arr[n-1]中選取最小值,與 arr[1]交換,第三次從 arr[2]~arr[n-1]中選取最小值,與 arr[2] 交換,…,第 i 次從 arr[i-1]~arr[n-1]中選取最小值,與 arr[i-1]交換,…, 第 n-1 次從 arr[n-2]~arr[n-1]中選取最小值, 與 arr[n-2]交換,總共通過 n-1 次,得到一個按排序碼從小到大排列的有序序列。
選擇排序思路分析圖:
- 對一個數組的選擇排序再進行講解
選擇排序應用例項:
有一群牛 , 顏值分別是 101, 34, 119, 1 請使用選擇排序從低到高進行排序 [101, 34, 119, 1]
package com.xuge.sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; /** * author: yjx * Date :2022/5/3014:01 **/ public class SelectSort { public static void main(String[] args) { // int arr[]={101,34,119,1}; // System.out.println("==========排序前========="); // System.out.println(Arrays.toString(arr)); // selectSort(arr); // // System.out.println("=========排序後========="); // System.out.println(Arrays.toString(arr)); int arr2[]=new int [80000]; for (int i = 0; i < 80000; i++) { arr2[i]=(int)(Math.random()*80000000);//生成隨機數[0,80000000); } System.out.println("====輸出陣列====="); Date data = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str=sdf.format(data); System.out.println("排序前的時間是:"+str);//54 selectSort(arr2); Date data2 = new Date(); String str2=sdf.format(data2); System.out.println("排序後的時間是"+str2);//59 } public static void selectSort(int []arr){ //逐步推導 //101,34,119,1 //1,34,119,101 //時間複雜度o(n2) // System.out.println(Arrays.toString(arr)); for (int i = 0; i < arr.length - 1; i++) { //1.假定最小值 int min=arr[i]; int minIndex=i; //開始比較 //2.第一輪最小值一級最小值索引找到 for(int j=i+1;j<arr.length;j++){ if(min>arr[j]){//min不是最小值 //重置最小值 min=arr[j]; //重置index minIndex=j; } } //3.將最小值與arr[i]交換 if(minIndex!=i){ arr[minIndex]=arr[i]; arr[i]=min; } } /* System.out.println(); int minIndex=0; //1.假定最小值 int min=arr[0]; //開始比較 //2.第一輪最小值一級最小值索引找到 for(int i=0+1;i<arr.length;i++){ if(min>arr[i]){//min不是最小值 //重置最小值 min=arr[i]; //重置index minIndex=i; } } //3.將最小值與arr[0]交換 if(minIndex!=0){ arr[minIndex]=arr[0]; arr[0]=min; } System.out.println("=========第一輪後========="); System.out.println(Arrays.toString(arr)); minIndex=1; //1.假定最小值 min=arr[1]; //開始比較 //2.第一輪最小值一級最小值索引找到 for(int i=0+2;i<arr.length;i++){ if(min>arr[i]){//min不是最小值 //重置最小值 min=arr[i]; //重置index minIndex=i; } } //3.將最小值與arr[0]交換 if(minIndex!=1){ arr[minIndex]=arr[1]; arr[1]=min; } System.out.println("=========第二輪後========="); System.out.println(Arrays.toString(arr)); minIndex=2; //1.假定最小值 min=arr[2]; //開始比較 //2.第一輪最小值一級最小值索引找到 for(int i=0+3;i<arr.length;i++){ if(min>arr[i]){//min不是最小值 //重置最小值 min=arr[i]; //重置index minIndex=i; } } //3.將最小值與arr[0]交換 if(minIndex!=2){ arr[minIndex]=arr[2]; arr[2]=min; } System.out.println("=========第三輪後========="); System.out.println(Arrays.toString(arr)); */ } }