选择排序的基本思想:首先从所有元素中找到最小的元素,放在第一个位置,然后从剩余的元素中找到第二小的,放在第二个位置。
/**
* 对前N的数的数组进行排序
* @param a 数组
* @param n 前n个数
*/
public static void selectionSort(int[] a,int n) {
for(int index = 0; index < n-1; index++) {
int indexOfNextSmallest = getIndexOfSmallest(a,index,n);
swap(a,index,indexOfNextSmallest);
}
}
/**
* 获取从索引开始到索引结束这之间最小的元素
* @param a 数组
* @param first 开始索引
* @param last 结束索引
* @return 元素最小的索引
*/
public static int getIndexOfSmallest(int[] a, int first, int last){
int min = a[first];
int indexOfMin = first;
for(int i = first + 1; i < last; i++) {
if(a[i] < min){
min = a[i];
indexOfMin = i;
}
}
return indexOfMin;
}
/**
* 进行交换
* @param a 数组
* @param i 索引i
* @param j 索引j
*/
public static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
时间复杂度:O(N^2)