zoukankan      html  css  js  c++  java
  • O(n^2)的排序方法

    选择排序

    • 基本思路:每次选择一个最小的值放在前面
    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
    • 稳定性:不稳定
    package Sort;
    
    public class SelectSort {
        public static void swap(int[] vec, int i, int j){
            int tmp = vec[i];
            vec[i] = vec[j];
            vec[j] = tmp;
        }
    
        public static void selectSort(int[] vec){
            if(vec.length < 2)
                return;
            for (int i = 0; i < vec.length - 1; i++) {
                int minIndex = i;
                for(int j = i + 1; j < vec.length; j++){
                    minIndex = vec[j] < vec[minIndex] ? j : minIndex;
                }
                swap(vec, i, minIndex);
            }
        }
    
        public static void main(String[] args) {
            int[] vec = {5,2,0,7,-3,8,12};
            selectSort(vec);
            for(int x : vec){
                System.out.print(x + "	");
            }
        }
    }
    

    冒泡排序

    • 基本思想:每次比较相邻两个,将较大元素置于后面
    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
    • 稳定性:稳定
    package Sort;
    
    public class BubbleSort {
        public static void swap(int[] vec, int i, int j){
            int tmp = vec[i];
            vec[i] = vec[j];
            vec[j] = tmp;
        }
    
        public static void bubbleSort(int[] vec){
            if(vec.length < 2)
                return;
            for (int i = vec.length-1; i > 0; i--) {
                for(int j = 0; j < i; j++){
                    if(vec[j] > vec[j+1]){
                        swap(vec, j, j+1);
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            int[] vec = {5,2,0,7,-3,8,12};
            bubbleSort(vec);
            for(int x : vec){
                System.out.print(x + "	");
            }
        }
    }
    

    插入排序

    • 基本思想:先将前面排好序,新元素向前比较放到合适位置
    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
    • 稳定性:稳定
    package Sort;
    
    public class InsertSort {
        public static void swap(int[] vec, int i, int j){
            int tmp = vec[i];
            vec[i] = vec[j];
            vec[j] = tmp;
        }
    
        public static void insertSort(int[] vec){
            for(int i = 1; i < vec.length; i++){
                for(int j = i - 1; j >= 0; j--){
                    if(vec[j] > vec[j+1]){
                        swap(vec,j,j+1);
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            int[] vec = {5,2,0,7,-3,8,12};
            insertSort(vec);
            for(int x : vec){
                System.out.print(x + "	");
            }
        }
    }
    
  • 相关阅读:
    按之字形打印二叉树 --剑指offer
    浅谈PHP+Access数据库的连接 注意要点
    Linux下统计代码行数
    获取服务器IP,客户端IP
    CURL访问举例
    廖雪峰博客
    Redis命令
    svn merge和branch 详解
    Linux Screen超简明教程
    MySQL 的Coalesce函数
  • 原文地址:https://www.cnblogs.com/happysml/p/13832460.html
Copyright © 2011-2022 走看看