选择排序

选择排序算法思想

选择排序的算法思想是假设有一个长度为N的数组,在[0...N-1]的范围上,从i=0开始,遍历整个数组,记录最小值下标。一趟结束后和起始位置交换,然后从i=1开始直到i=N-1结束

选择排序算法实现

public static void main(String[] args) {
        int[] arr = {-2, 1, 33, 4, 5, 0, 0, -1, 45, 908, 3};
        int[] sortList = selectSort(arr);
       for (int i : sortList) {
            System.out.print(i + "  ");
        }
        int[] sortListSample = selectSortSample(arr);
        for (int i : sortListSample) {
            System.out.print(i + "  ");
        }
    }
   /**
     * 简单实现
     *
     * @param arr
     * @return
     */
    private static int[] selectSortSample(int[] arr) {
        if (arr.length < 0) {
            return null;
        }
        int N = arr.length;
        int j, i;
        for (i = 0; i < N; i++) {
            for (j = i + 1; j < N; j++) {
                //在这个位置会有很多次的交换,但是这些应该都是不必要,
                // 我们只需要把最小的角标标识出来移动一次就OK了
                if (arr[j] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    /**
     * 比较排序
     *
     * @param arr
     * @return
     */
    private static int[] selectSort(int[] arr) {
        if (arr.length < 0) {
            return null;
        }
        int N = arr.length;
        int j, i;
        for (i = 0; i < N; i++) {
            // 标记最小的角标
            int min = i;
            for (j = i + 1; j < N; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            // switch 把最小的元素和当前的元素交换
            /** 注意是arr[i]和arr[min]交换**/
            if (i != min) {
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        return arr;
    }

算法复杂度

1.平均时间复杂度:O(N^2)
2.最坏时间复杂度:O(N^2) 出现情况:任何情况下
3.最好时间复杂度:O(N^2) 出现情况:任何情况下
4.空间复杂度:O(1) 不需要额外空间

算法稳定性

  1. 是不稳定的算法,因为在移动的时候不能保证相同元素的前后顺序

想看更多完整版请点击:(选择排序)[http://git.oschina.net/xiaoyuxi/algorithm/blob/master/src/main/java/com/al/study/record/sort/InsertSort.java]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • 第031句 Generally there was a belief that the new nations s...
    世界第一帅的人阅读 457评论 0 0
  • 节前,我回到了我的故乡,虽然故乡并不是离得很远。 春运|高峰 赶、赶、赶,地铁站得腿软;高铁座位气派的那个爽;小巴...
    独怜幽竹阅读 337评论 0 2
  • 事件的發生不是平白無故的,我相信宇宙有強大的能量,而我是宇宙能量中很重要的一股力量。 前段時間手上因為有傷,沒隔幾...
    粟莎阅读 214评论 0 0