选择排序作为基础的排序算法,它的时间复杂度是O(n^2)
特性:
1、在任何时候不管什么有序无序序列,它都要经过两次for循环
2、不会相等的值之间的原有的顺序
例如:给一组数组[5,8,6,3,9,2,1,7]进行排序,实现效果如下:
public class selectionSort {
public static void sort(int arr[]){
for(int i = 0;i < arr.length; i ++) {
int minIndex = i;
for (int j = i; j < arr.length; j++){
if(arr[j] < arr[minIndex])
minIndex = j;
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
public static void main(String[] args) {
int arr[] = {5,8,6,3,9,2,1,7};
selectionSort.sort(arr);
for(int e : arr)
System.out.print(e + " ");
}
}
使用带约束的泛型实现排序:
public class selectionSort {
public static <E extends Comparable<E>>void sort(E arr[]){
for(int i = 0;i < arr.length; i ++) {
int minIndex = i;
for (int j = i; j < arr.length; j++){
if(arr[j].compareTo(arr[minIndex]) <0 )
minIndex = j;
}
E temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
public static void main(String[] args) {
Integer arr[] = {5,8,6,3,9,2,1,7};
selectionSort.sort(arr);
for(int e : arr)
System.out.print(e + " ");
}
}
附:
数据生成器:
import java.util.Random;
public class ArrayGenerator {
private ArrayGenerator(){}
public static Integer[] GenerateOrdered(int n) {
Integer[] arr = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = i;
}
return arr;
}
public static Integer[] generateRandomArray(int n,int bound){
Integer[] arr = new Integer[n];
Random ran = new Random();
for (int i = 0; i < n; i++) {
arr[i] = ran.nextInt(bound);
}
return arr;
}
}