• 基本排序算法


    排序算法:

    快速排序:

    时间复杂度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;

    }

    }

    }

    }

  • 相关阅读:
    洛谷P1169 [ZJOI2007]棋盘制作
    洛谷P4147 玉蟾宫
    洛谷P3068 [USACO13JAN]Party Invitations S
    洛谷P3594 [POI2015]WIL-Wilcze doły
    洛谷P2564 [SCOI2009]生日礼物
    洛谷P4296 [AHOI2007]密码箱
    洛谷P2421 [NOI2002]荒岛野人
    洛谷P3990 [SHOI2013]超级跳马
    MySQL 默认引擎 默认编码
    Python 换源
  • 原文地址:https://www.cnblogs.com/ttaall/p/12004576.html
Copyright © 2020-2023  润新知