1 选择排序顾名思义就是排序中会进行一次选择操作。
选择排序的基本思路:
从第一个元素开始,每次从未排序的数组元素中,选择最小的元素出来,加入到前面已排序的行列。
举例:
对数组{8,6,5,9,1,3,2}进行选择排序
原始数组:8,6,5,9,1,3,2
第一次排序:1,6,5,9,8,3,2
第二次排序:1,2,5,9,8,3,6
第三次排序:1,2,3,9,8,5,6
第四次排序:1,2,3,5,8,9,6
第五次排序:1,2,3,5,6,9,8
第六次排序:1,2,3,5,6,8,9
第七次排序:1,2,3,5,6,8,9
排序完成。
2 选择排序跟冒泡排序都是比较-->交换的排序算法
选择排序的时间复杂度也是O(N^2)
3 代码实现:
package yushen0.sort;
/**
*
* @class_name SelectSort.java
* @package_name yushen0.sort
* @date 2018年5月22日 下午3:52:56
*/
public class SelectSort {
public static void main(String[] args) {
int[] nums = {8,6,5,9,1,3,2};
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("排序之前:{");
for (int i : nums) {
strBuilder.append(i + ",");
}
String str = strBuilder.toString().substring(0, strBuilder.toString().length() - 1);
System.out.println(str + "}");
// 选择排序
selectSort(nums);
strBuilder.setLength(0);
strBuilder.append("排序之后:{");
for (int i : nums) {
strBuilder.append(i + ",");
}
String str2 = strBuilder.toString().substring(0, strBuilder.toString().length() - 1);
System.out.println(str2 + "}");
}
/**
* 选择排序
*
* @param nums
*/
private static void selectSort(int[] nums) {
for (int i = 0; i < nums.length; i++) {
int k = i;
for (int j = k + 1; j < nums.length; j++) {
// 找到未排序的元素中的最小值的索引
if (nums[j] < nums[k]) {
k = j;
}
}
// 将最小值的元素与前面的元素进行交换
if (k != i) {
int temp = nums[i];
nums[i] = nums[k];
nums[k] = temp;
}
}
}
}