【基础排序】选择排序

前面说的冒泡排序是每一轮比较确定最后一个元素,中间过程不断地交换。而选择排序就是每次选择剩下的元素中最小的那个元素,与当前索引位置的元素交换,直到所有的索引位置都选择完成。

排序的步骤如下:
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);
    }

}
View Code

引用链接:https://www.cnblogs.com/yyyyfly1/p/15773593.html

posted @ 2022-04-07 18:02  v大喵  阅读(49)  评论(0编辑  收藏  举报