欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jave实现排序算法:选择排序

程序员文章站 2024-03-01 13:17:34
...

选择排序

版本1

从小到大:
1、定义一个10个int元素的数组。
2、选择第一个元素,将这个元素和剩下的九个元素相比,找出最小的那个,然后和第一个元素交换位置。如果第一个元素就是最小的元素,那么不需要交换位置(<或者>,而不是<=或者>=)
3、选择第二个元素,将这个元素和剩下的八个元素相比,找出最小的那个,然后和第二个元素交换位置。如果第二个元素就是最小的元素,那么不需要交换位置(<或者>,而不是<=或者>=)
4、。。。。。。

也可以这样想:假设第一个元素就是最小的那个元素,将这个元素和剩下的九个元素相比,看还有没有比它小的元素,如果有,就将这个元素放到最小元素的位置—第一个元素。。。。

package com.oceanstar.sort;

import java.util.Arrays;

public class sort {
    public static void main(String []args){
        int []arr = {199, 11, 23, 56, 55, 49, 88};
        selectSort(arr);
        System.out.println(Arrays.toString(arr));
    }


    public static int [] selectSort(int []arr){
        for(int i=0; i<arr.length-1; i++){
            for (int j=i+1; j<arr.length; j++){
                if (arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    

}

总结:有序区逐步扩大,无序区逐步缩小
选择排序法需要比较:9+7++6+5+4+3+2+1次

版本2

从小到大:
1、定义一个10个int元素的数组。
2、选择第一个元素为最小的元素,并用一个index和num记录下此时的值与索引。然后分别拿这个值与剩下的值相比,如果有比这个元素还要小的元素,就用index和num记录下此时的值和索引。比较完一轮之后,如果发现index不为1,那么和第一个元素相交换。
3、选择第二个元素为最小的元素,并用一个index和num记录下此时的值与索引。然后分别拿这个值与剩下的值相比,如果有比这个元素还要小的元素,就用index和num记录下此时的值和索引。比较完一轮之后,如果发现index不为2,那么和第二个元素相交换。
4、。。。

package com.oceanstar.sort;

import java.util.Arrays;

public class sort {
    public static void main(String []args){
        int []arr = {199, 11, 23, 56, 55, 49, 88};
        SelectSort(arr);
        System.out.println(Arrays.toString(arr));
    }


    public static int [] SelectSort(int []arr){
        for(int i = 0; i < arr.length-1; i++){
            int index = i;
            for (int j = i+1; j < arr.length; j++){
                if (arr[j] < arr[i]){
                    index = j;
                }
            }

            if( index != i){
                swap(arr, i, index);
            }
        }

        return arr;
    }

    public static void swap(int []arr, int x, int y){
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }

}

总结:比起版本1,交换的步骤要小