直接选择排序
直接选择排序的思路是(为方便,我们仍讨论从小到大的顺序排序),从前向后比较,第一轮将首位的值与后面的值依次比较,如果首位的值比后面的值大,那么二者相交换,直到全部比较完毕为止。第一轮即可获得该队列的最小值,次轮则可获得该队列的次小值,以此类推,并最终得到结果。
下面是Java代码
/**
* 直接选择排序
* @param data
*/
private static void directSelectSort(int[] data) {
if (null == data || data.length <= 1) {
return;
}
for (int i = 0; i < data.length; i++) {
for (int j = i+1; j < data.length; j++) {
if (data[i]>data[j]) {
swap(data, i, j);
}
}
}
}
/**
* 数组内 i 坐标元素与 j 坐标元素互换
* @param data
* @param i
* @param j
*/
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
选择排序
/**
* 选择排序
* @param data
*/
private static void selectSort(int[] data) {
if (null == data || data.length <= 1) {
return;
}
for (int i = 0; i < data.length; i++) {
int min = i;
for (int j = i+1; j < data.length; j++) {
if (data[min]>data[j]) {
min = j;
}
}
System.out.println(min);
if (min != i) {
swap(data, min, i);
}
}
}
/**
* 数组内 i 坐标元素与 j 坐标元素互换
* @param data
* @param i
* @param j
*/
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
选择排序每一轮至多进行一次交换,相较于直接选择排序和冒泡排序其效率已经提升了很多。