【基础排序】选择排序
前面说的冒泡排序是每一轮比较确定最后一个元素,中间过程不断地交换。而选择排序就是每次选择剩下的元素中最小的那个元素,与当前索引位置的元素交换,直到所有的索引位置都选择完成。
排序的步骤如下:
1. 从第一个元素开始,遍历其后面的元素,找出其后面比它更小的且最小的元素,若有,则两者交换,保证第一个元素最小。
2. 对第二个元素一样,遍历其后面的元素,找出其后面比它更小的且最小的元素,若存在,则两者交换,保证第二个元素在未排序的数中(除了第一个元素)最小。
3. 依次类推,直到最后一个元素,那么数组就已经排好序了。
package sort; public class SelectionSort { public static void printf(int[] nums) { for (int num : nums) { System.out.print(num + " "); } System.out.println(""); } public static void selectionSort(int []nums) { //int times=0; // 记录对比次数. int size=nums.length; int minIndex,temp; for(int i = 0;i < (size - 1);i++) { //System.out.print("第" + (i + 1) + "轮选择开始:"); minIndex = i; for(int j = i + 1;j < size;j++) { //times++; if(nums[j] < nums[minIndex]) { minIndex = j; } } //System.out.println("交换 "+nums[i]+"和"+nums[minIndex]); temp = nums[i]; nums[i] = nums[minIndex]; nums[minIndex] = temp; //printf(nums); } //System.out.println("比较次数:"+times); } public static void main(String[] args) { // TODO Auto-generated method stub int[]nums = new int[]{98,90,34,56,21, 7}; printf(nums); selectionSort(nums); System.out.println("------------------------"); printf(nums); } }
引用链接:https://www.cnblogs.com/yyyyfly1/p/15773593.html