標籤:java 選擇排序
計算演算法時間複雜度比冒泡快一點
選擇排序法核心思想是,第一次從R[0] ~R[n-1]中選擇最小值然後與R[0]交換,第二次從R[1] ~R[n-1]中選取最小值與R[1]交換………第i次呢就是從R[i-1] ~R[n-1]中選取最小值,與R[i-1]元素交換;對於一個含有n個元素的數組,最多交換n-1次就得到了一個排序碼從小到大的有序序列。
package com.PengRong.A;import java.util.*;/** * * @author PengRong * */public class DemoSelection{ public static void main(String[] args) { // TODO Auto-generated method stub //隨機產生一萬個測試資料 int len=10000; int[] arr =new int[len]; for(int i=0; i<len; i++) { int t =(int)(Math.random()*10000); arr[i] =t; } Selection selection = new Selection(); selection.Test(); selection.Sort(arr); selection.Test(); /*for(int i=0; i<arr.length; i++) { System.out.println("arr[" +i+ "]="+arr[i]); }*/ }}/** * @功能:選擇排序實現; * 選擇排序的思想是一次次將最小值放到前面的有序序列 * @author PengRong * */class Selection{ /** * @author PengRong * @功能:用於計算當前的系統時間 */ public void Test() { Calendar cal =Calendar.getInstance(); System.out.println(cal.getTime()); } public void Sort(int[] arr) { int temp = 0;//交換時候計入中間值 int min = 0;//最小值 int minIndex = 0;//最小值的索引 //外層迴圈控制次數,對於一個含有n個元素的數組來說只需要迴圈n-1次就可以了。 for(int j=0; j<arr.length-1; j++) { //每趟選擇排序中預設第一個元素是最小的 min = arr[j]; minIndex = j; //內層迴圈找到這趟的最小值min for(int k =j+1; k<arr.length; k++) { if(min > arr[k]) { min = arr[k]; minIndex = k; } } //如果找到了最小值與預設最小值不一致,交換arr[j]與arr[minIndex]的數值 if(minIndex != j) { temp = arr[j]; arr[j] = arr[minIndex]; arr[minIndex] = temp; } } }}
該曆程實現了對選擇排序系統時間的顯示,可以看到當參數資料在 int len=10000; 一萬層級時候演算法是非常快的,系統時間看不出有流失
當int len =80000;用了8s
當int len =100000;用了13s
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
選擇式排序法之選擇排序法實現 -java版