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 + "	");
            }
        }
    }
    
  • 相关阅读:
    DNS服务器配置
    动态网站技术CGI
    SED单行脚本快速参考(Unix 流编辑器)
    xen 安静的角落
    IP命令
    oracle 监听文件 说明
    LRU ,LRUW,CKPT-Q
    重建控制文件ORA-12720
    历史备份控制文件恢复数据库
    增量检查点和完全检查点
  • 原文地址:https://www.cnblogs.com/happysml/p/13832460.html
Copyright © 2011-2022 走看看