zoukankan      html  css  js  c++  java
  • 基本排序算法

    排序算法:

    快速排序:

    时间复杂度O(nlogn) 空间复杂度1

    适用于大多数排序,性能很高

    不稳定排序

    步骤描述:

    取数组首元素为基准值。设置一个i指针指向首元素,再设置一个j指针指向尾元素。在i<j的前提下。从j开始往回找,遇到第一个比基准值小的数,将该元素与基准值交换,i++;再从i往后找,遇到第一个比基准值大的值,使它与基准值交换,j++;直到i>=j停止。

    代码:

    int length=array.length;

    public void sort(int[] array,int begin,int end){

    int i=begin;

    int j=end;

    int base=array[begin];

    While(i<j){

    Int temp;

    While(i<j&&array[j]>base){

    j--;

    }

    if(i<j){

    temp=array[j]

    array[i]=array[j];

    array[j]=temp;

    i++;

    }

    While(i<j&&array[i]<base){

    i++;

    }

    If(i<j){

    temp=array[i];

    array[i]=array[j];

    array[j]=temp;

    j--;

    }

    }

    array[i]=base;

    sort(array,begin,i-1);

    Sort(array,i+1,end);

    }

    插入排序:

    时间复杂度O(n^2); 空间复杂度1

    使用场景:近乎有序,向序列中插入

    稳定

    步骤描述:

    将数组分成一份有序的数组,一份待排序的数组(如果从零排序把第一个数当做有序数组)将待排序的数组从第一个元素开始,依次与有序的数组最后一个元素作比较,如果大于它不变,如果小于前一个元素就触发一个循环:将该元素拿出来,与有序数组的从后到前的每一个值作比较,当发现比前一个小就把前一个数组后移一位,直到找到合适的位置插进去,或者比所有元素小插到第一个位置。

    代码实现:

    Int length=array.length;

    Public void sort(){

    for(int i=1;i<length;i++){

    if(array[i]>array[i-1]){

    int temp=array[i];

    for(int j=i;j>0;j--){

    If(temp<array[j-1]){

    array[j]=array[j-1];

    }else{

    array[j]=temp;

    }

    }

    }

    }

    }

    冒泡排序:

    时间复杂度O(n^2);空间复杂度1

    稳定

    步骤描述:

    冒泡,从第一个元素开始,两个两个作比较,如果前一个大于后一个就交换。

    大循环(n-1次)每次循环能找出一个当前序列里最大的;

    小循环(n-1次)每次两两比较,共比较n-1

    代码实现:

    public void sort(){

    Int length=array.length;

    for(int i=0;i<length-1;i++){

    for(int j=0;j<length-1;j++){

    if(array[j]>array[j+1]){

    int temp=array[j+1];

    array[j+1]=array[j];

    array[j]=temp;

    }

    }

    }

    }

    选择排序:

    时间复杂度O(n^2);空间复杂度1;

    不稳定

    步骤描述:

    设置一个min用来存储最小值,默认是第一个。循环的往后找,每当找到比min小的,交换到第一个位置。循环一次下来得到一个最小值,循环n次全部排序好。

    代码实现:

    Public void sort(){

    For(int i=0;i<array.length;i++){

    Int min=i;

    For(int j=i;j<array.length;j++){

    If(array[j]<array[min]){

    Int temp=array[j];

    array[j]=array[min]

    Array[min]=temp;

    }

    }

    }

    }

  • 相关阅读:
    02.CentOS Linux 7.7 Nginx安装部署文档
    rpm操作
    mysql命令行备份方法
    nginx reload的原理
    Linux操作笔记
    mysql账户授权
    centos系统内核升级
    docker随笔
    linux系统查看当前正在运行的服务
    数据库锁表问题
  • 原文地址:https://www.cnblogs.com/ttaall/p/12004576.html
Copyright © 2011-2022 走看看