Java 直接选择排序算法

来源:互联网 发布:Mac梦幻西游 编辑:程序博客网 时间:2024/05/17 07:46

Java 直接选择排序算法

使用场景:

它需要经过n-1趟比较。算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的。在大多数情况下都不推荐使用。只有在希望减少交换次数的情况下可以用。

排序原理:

选择排序算法的一般策略:搜索整个值列,以找到最小值。将该值与值列中第一个位置上的值进行交换。搜索剩下的值列(第一个除外),以找到其中的最小值,然后将其与值列中第二个位置上的值进行交换。对值列中的每个位置重复该过程。在算法结束时,就完成了对值列的排序。

具体代码示例:

     packagecom.test.sort;

 

 

public class SelectSortTest {

 

    public staticvoid main(String[] args) {

        int[] data= new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };

        print(data);

       selectSort(data);

       print(data);

    }

 

    public staticvoid swap(int[] data, int i, int j) {

        if (i == j){

            return;

        }

        // 将i和j这两个位置的值进行交换

        data[i] =data[i] + data[j];

        data[j] =data[i] - data[j];

        data[i] =data[i] - data[j];

    }

 

    public staticvoid selectSort(int[] data) {

        for (int i= 0; i < data.length - 1; i++) {

            intminIndex = i; // 记录最小值的索引

            for(int j = i + 1; j < data.length; j++) {

                if(data[j] < data[minIndex]) {

                   minIndex = j; // 若后面的元素值小于最小值,将j赋值给minIndex

                }

            }

            if(minIndex != i) {

               swap(data, i, minIndex);

                print(data);

            }

        }

    }

 

    public staticvoid print(int[] data) {

        for (int i= 0; i < data.length; i++) {

           System.out.print(data[i] + "\t");

        }

       System.out.println();

    }

}