1. 程式人生 > 其它 >構建者模式的實際使用

構建者模式的實際使用

基本介紹

選擇式排序也屬於內部排序法,是從欲排序的資料中,按指定的規則選出某一元素,再依規定交換位置後達到排序的目的。

選擇排序思想:

選擇排序(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));
    */

  }
}