Java排序算法___选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

选择排序分析

排序过程:

    /**
     *  首先找到数组中最小的那个元素,
     * 其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换。
     * 如果只剩下最后一个元素,就没必要排了,它就是最大的)。
     * 再次在剩下的元素中找最小的元素,将它与数组中的第二个元素交换。
     * 如此往复,直到将整个数组排序。
     *
     * 为什么叫它选择排序?因为从上面的算法中可以看到它一直不断地在选择剩余元素中的最小值。* @param a
     * @return
     */
        public static void  selectSort(int[] list){
        //先选出最大值放在最后面
        for (int i = list.length-1; i >=0 ; i--) {
            for (int j = i; j >=0; j--) {
                if (list[i] < list[j ]) {
                    int temp = list[i];
                    list[i ] = list[j];
                    list[j] = temp;
                }
            }
        }
        //先选出最小值放前面
        for(int i=0;i<list.length-1;i++){  //外层控制排序次数 最后一次是a[length-2] a[length-1]
            for(int j=i+1;j<list.length;j++){ //内层控制需要排序的数字序号(每一次排序多少次)
                if( list[i]>list[j]){
                    int m=list[i];
                    list[i]=list[j];
                    list[j]=m;
                }
            }
        }
        //先选出最大值放前面
        for(int i=0;i<list.length-1;i++){  //外层控制排序次数 最后一次是a[length-2] a[length-1]
            for(int j=i+1;j<list.length;j++){ //内层控制需要排序的数字序号(每一次排序多少次)
                if( list[i]<list[j]){ //改变此处符号即可改变排序顺序
                    int m=list[i];
                    list[i]=list[j];
                    list[j]=m;
                }
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/xuefu_78/article/details/112131465