选择排序

package DataStructure;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Created by robert on 2016/12/17.
* 选择排序
*/
public class SelectionSort {

/**
* 找最小元素下标
* @param nums 数组
* @param sIndex 开始下标
* @return
*/
public static int findMinimumIndex(int[] nums,int sIndex){
int minimumIndex = sIndex;
for(int i=sIndex+1;i<nums.length;i++){
if(nums[minimumIndex]>nums[i]){
minimumIndex=i;
}
}
return minimumIndex;
}

public static void selectSort(int[] nums){
int mininumIndex = 0;
for(int i=0;i<nums.length-1;i++){
mininumIndex = findMinimumIndex(nums,i);
if(nums[mininumIndex]!=nums[i]){
int temp = nums[i];
nums[i] = nums[mininumIndex];
nums[mininumIndex] = temp;
}
}
}

/**
* 生成乱序数组
* @param n
* @return
*/
private static int[] createArr(int n){
List<Integer> list = new ArrayList<Integer>(n);
for(int i=1;i<=n;i++){
list.add(i);
}
Collections.shuffle(list);
int[] nums = new int[n];
for(int i=0;i<nums.length;i++){
nums[i] = list.get(i);
}
System.out.println("初始化数组结束");
// printArr(nums);
return nums;
}

private static void printArr(int[] numArr) {
for(int num:numArr){
System.out.print(num+",");
}
System.out.println();
}

public static void main(String[] args) {
int[] numArr = createArr(10000);
long startTime = System.nanoTime();
selectSort(numArr);
System.out.println("共计耗时:"+String.valueOf(System.nanoTime()-startTime));
// printArr(numArr);
}

}
不管数组中元素的初始化顺序是什么,都是O(n²)
10000个数字排序需要耗时29284920纳秒
原文地址:https://www.cnblogs.com/mengjianzhou/p/6189640.html