简单排序-冒泡排序,选择排序,插入排序

简单排序

排序,希望都能掌握一下,同时做好笔记,避免每次都重复从网上查找相关内容。

基本概念

时间复杂度:一种事前统计的计算方式,评判一个算法的优劣程度;
空间复杂度:现在基本不会考虑空间复杂度,因为很多时候都会采取以空间换取时间的方式;
算法稳定性:如果待排序的序列中存在值等的元素,经过排序之后,相等元素之间原有的先后顺序不变,就说明这个排序算法时稳定的。

冒泡排序

冒泡排序是一种最简单的排序方式,其时间复杂度为O(n²),空间复杂度为O(1),算法为稳定的
代码实现:

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

插入排序

思路就是以一段排好序的跟一段未排序,将未排序的部分插入到已排序里面,其时间复杂度为O(n²),空间复杂度为O(1),算法为稳定的

private void insertSort(int[] arr){
    if (arr.length <= 1){
        return;
    }
    // 每次以当前位置的数据与前面已排序好的数据进行比较
    for (int i = 1; i< arr.length ;i++){
        // 当前位置数值
        int curr = arr[i];
        // 排好序的最大的一个位置
        int pre = i - 1;
        // 最大位置的比当前位置的大,那么将当前位置设置为最大的值
        while (pre >= 0 && curr < arr[pre]){
            arr[pre + 1] = arr[pre];
            // 再往下比较较大的数值
            pre --;
        }
        // 把对应位置的值设置为当前值
        arr[pre + 1] = curr;
    }
}

选择排序

已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾,其时间复杂度为O(n²),空间复杂度为O(1),算法为不稳定的

private void insertSort(int[] arr){
    if (arr.length <= 1){
        return;
    }

    for (int i = 0; i< arr.length ;i++){
        int minIndex = i;
        for  (int j = i ; j < arr.length; j++){
            minIndex = arr[minIndex] > arr[j] ? j : minIndex;
        }
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务