标签:循环控制 java实现 控制 实现 图片 中间 打印 排序 out
选择排序是一种简单排序算法。这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素。当然,一开始的时候,我们认为都是未经排序的。
选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置。主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置。以一个元素个数为N的整形数组arr为例:
以下面的一个原始数组作为一个例子:
我们交换14和10,这样得到了最小的值放到数组第一个位置中:
第二趟:以第二个元素33为基准,往后找最小的数:
找到第二小的数14,交换第二个元素和14:
完成第二趟排序,至此第二小的元素已经放置在数组的第二个位置中。
后面的排序过程以此类推,以下是整个排序过程:
最后展示完整的选择排序代码:
package org.byron4j.sort;
/**
*
* @author Byron.Y.Y
* @version 1.0
* Java-选择排序-以整形数组为例
*/
public class SelectionSort {
/**
* 注意:该方法仅仅展示选择排序的过程,并没有校验入参arr是否为null
* @param arr
*/
public static void sort(int[] arr){
//数组长度
int size = arr.length;
//每一趟的最小值在数组arr中的索引位置
int temp = 0;
//中间值,用来交换
int tempVal = 0;
/*外层循环控制选择排序的趟数*/
for( int i = 0; i < size; i++ ){
temp = i;
//内层循环,走完一趟,得到该趟最小值所在的索引位置
for(int j = i+ 1; j < size; j++){
if( arr[j] < arr[temp] ){
temp = j;
}
}
//最小值索引位置与当前基准元素位置不一致,则交换二者
if( temp != i ){
tempVal = arr[i];
arr[i] = arr[temp];
arr[temp] = tempVal;
}
//至此第i+1趟,排序完毕,将第i+1小的元素放在第i+1的位置上
//这里可以打印出来每一趟选择排序后数组的位置元素
System.out.print("第" + ( i + 1 ) + "趟: ");
for(int k = 0; k < size; k++){
System.out.print(arr[k] + ((k != size -1) ? ", " : ""));
}
System.out.println();
}
}
public static void main(String[] args) {
int[] arr = {14, 33, 27, 10, 35, 19, 42, 44};
sort(arr);
}
}
第1趟: 10, 33, 27, 14, 35, 19, 42, 44
第2趟: 10, 14, 27, 33, 35, 19, 42, 44
第3趟: 10, 14, 19, 33, 35, 27, 42, 44
第4趟: 10, 14, 19, 27, 35, 33, 42, 44
第5趟: 10, 14, 19, 27, 33, 35, 42, 44
第6趟: 10, 14, 19, 27, 33, 35, 42, 44
第7趟: 10, 14, 19, 27, 33, 35, 42, 44
第8趟: 10, 14, 19, 27, 33, 35, 42, 44
标签:循环控制 java实现 控制 实现 图片 中间 打印 排序 out
原文地址:https://www.cnblogs.com/fefi521/p/9234582.html