选择排序算法也是比较简单的排序算法,选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。
选择排序算法
通过选择和交换来实现排序,以从小到大排序为例,其排序流程如下:
(1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
(2)接着从剩下的n - 1 个数据中选择次小的1个数据,将其和第2个位置的数据交换。
(3)然后不断重复上述过程,直到最后两个数据完成交换。
初始数据: 118 101 105 127 112
一次排序: 101 118 105 127 112
二次排序: 101 105 118 127 112
三次排序: 101 105 112 127 118
四次排序: 101 105 112 118 127
选择排序算法特点:在对n个数据进行排序时,无论原数据有无顺序,都需要进行 n - 1步的中间排序。思路简单直观,但是执行的步骤较多,效率不高。
选择排序算法的示例代码如下:
void selectSort(int[] a){
int index;
int temp;
for(int i = 0; i < a.length-1; i++) {
index = i;
for(int j = i + 1; j < a.length; j++) {
if(a[j] < a[index]) {
index = j;
}
}
if(index != i){
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
System.out.printf("第%d步排序结果为:",i+1);
for(int k = 0; k < a.length; k++) {
System.out.print(a[k] + "\t");
}
System.out.println();
}
}
选择排序算法实例
随机生成100~200之间的10个整数,将整数以1维数组的方式保存,用选择排序算法进行从小到大排序:
public class SelectSort {
private static final int SIZE = 10;
public static void selectSort(int[] a){
int index;
int temp;
for(int i = 0; i < a.length-1; i++) {
index = i;
for(int j = i + 1; j < a.length; j++) {
if(a[j] < a[index]) {
index = j;
}
}
if(index != i){
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
System.out.printf("第%d步排序结果为:",i+1);
for(int k = 0; k < a.length; k++) {
System.out.print(a[k] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[] array = new int[SIZE];
for(int i = 0; i < SIZE; i++) {
array[i] = (int)(100 + Math.random()*100);
}
System.out.println("排序前的数组为:");
for(int num:array){
System.out.print(num + "\t");
}
System.out.println();
selectSort(array);
System.out.println("排序后的数组为:");
for(int num:array){
System.out.print(num + "\t");
}
}
}
运行结果如下:
排序前的数组为:
145 157 158 106 132 118 168 142 180 172
第1步排序结果为:106 157 158 145 132 118 168 142 180 172
第2步排序结果为:106 118 158 145 132 157 168 142 180 172
第3步排序结果为:106 118 132 145 158 157 168 142 180 172
第4步排序结果为:106 118 132 142 158 157 168 145 180 172
第5步排序结果为:106 118 132 142 145 157 168 158 180 172
第6步排序结果为:106 118 132 142 145 157 168 158 180 172
第7步排序结果为:106 118 132 142 145 157 158 168 180 172
第8步排序结果为:106 118 132 142 145 157 158 168 180 172
第9步排序结果为:106 118 132 142 145 157 158 168 172 180
排序后的数组为:
106 118 132 142 145 157 158 168 172 180