九大常见排序算法

本文详细介绍了九种常见的排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序、基数排序和桶排序。每种算法都阐述了其基本思想、代码实现、运行结果以及时间复杂度和空间复杂度分析。这些排序算法在不同场景下有不同的效率和稳定性特点,对于理解数据处理和算法优化具有重要意义。
摘要由CSDN通过智能技术生成

排序算法一:冒泡排序算法

基本思想:n个数比较n-1轮,第一轮有n个数,但是由于是两两比较,所以只用比较n-1次;第二轮由于前一轮结束后,最大(最小)的数已经方法第n-1位了,所以只用再比较剩下的n-1个数,要比较n-2次;以此类推,那么第i轮就要比较n-i次,所以代码为:

import java.util.Arrays;
public class Main {
   
    public static void mP(int[]num,int size){
   
        for(int i=1;i<size;++i){
   //轮数
            boolean flag=true;//标志,因为可能中间哪一轮就已经有序了
            for(int j=0;j<size-i;++j){
   //比较次数
                if(num[j]>num[j+1]){
   
                    int tmp=num[j];
                    num[j]=num[j+1];
                    num[j+1]=tmp;
                    flag=false;
                }
            }
            if(flag){
   
                break;
            }
        }
    }
    public static void show(int[]num){
   
        System.out.println(Arrays.toString(num));
    }
    public static void main(String[] args) {
   
        int[]num=new int[]{
   2,8,1,5,6,7,3};
        System.out.print("冒泡排序前:");
        show(num);
        System.out.print("冒泡排序后:");
        mP(num,7);
        show(num);
    }
}

运行结果:
在这里插入图片描述

复杂度分析:
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定

排序算法二:选择排序

基本思想:和冒泡排序类似,只不过,不是每次比较完符合条件就交换了,而是把每一轮的最大值的下标记录下来,和第n-i个元素比较然后符合交换条件时再交换,也就是说,每一轮只交换一次。代码实现:

public class Main {
   
    public static void xZ(int[]num,int size){
   
        for(int i=1;i<size;++i){
   
            int index=0;//默认记录最大值的位置,这样排出来是升序
            for(int j=1;j<=size-i;++j){
   
                if(num[index]<num[j]){
   //默认记录最大值的位置,这样排出来是升序
                    index=j;
                }
            }
            int tmp=num[index];
            num[index]=num[size-i];//和最后一个值进行交换
            num[size-i]=tmp;
        }
    }
    public static void show(int[]num){
   
        System.out.println(Arrays.toString(num));
    }
    public static void main(String[] args) {
   
        int[]num=new int[]{
   2,8,1,5,0,6,7,3,10};
        System.out.print("选择排序前:");
        show(num);
        System.out.print("选择排序后:");
        xZ(num,9);
        show(num);
    }
}

运行结果:
在这里插入图片描述

复杂度分析:
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:不稳定

排序算法三:插入排序

基本思想:比较j下标的值与tmp保存的值的大小关系,如果要升序排列,那么就是j下标的值比tmp下标大的,就让num[j+1]=num[j],然后j–,直到j<0或者num[j]<num[j+1]的值为止,然后将tmp的值放到num[j+1]的位置,然后i++,每一次排序使得前i项有序。说白了就是给第tmp中存的i下标的值在前i个位置中找空位。
在这里插入图片描述

代码实现:

public class Main {
   
    public static void insertSort(int[]num,int size){
   
        for(int i=1;i<size;++i){
   
           int tmp=num[i];
          int j=i-1;
          while(j>=0&&num[j]>tmp){
   
              num[j+1]=num[j];
              j--;
          }
          num[j+1]=tmp;
        }
    }
    public static void show(int[]num){
   
        System.out.println(Arrays.toString(num));
    }
    public static void main(String[] args) {
   
        int[]num=new int[]{
   2,8,1,5,0,6,7,3,10};
        System.out.print("插入排序前:");
        show(num);
        System
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值