首页 > 其他分享 >总结所有的排序方式

总结所有的排序方式

时间:2023-04-01 23:45:39浏览次数:43  
标签:总结 arr 方式 int mid length static 排序 public

一、插入排序

就是从左到右遍历,然后看看这个数是否比前面的数小,如果比前面的小就插入到这个数的前面。

public static void insertionSort(int[] arr) {
        if (arr != null && arr.length >= 2) {
            for(int i = 1; i < arr.length; ++i) {
                for(int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; --j) {
                    swap(arr, j, j + 1);
                }
            }
        }
}

 

二、冒泡排序

所谓的冒泡,就是小的数不断的跳到左边。这里注意,每一次循环,最小的值都会到最后一位。

 

 

 

 

    public static void sort(int[] arr) {
        if (arr != null && arr.length > 2) {
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = arr.length - 1; j >= i + 1; j--) {
                    if (arr[j] < arr[j - 1]) {
                        swap(arr, j, j - 1);
                    }
                }
            }
        }
    }
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

 

 三、归并排序

归并排序稍微比较复杂,感觉怎么讲都有点讲不太明白,主要是merge的代码较为复杂,其他的就是和递归结合,还是得看代码,注意边际条件。

 

 

 

  public static void mergeSort(int[] arr) {
        if (arr != null && arr.length > 2) {
            mergeSort(arr, 0, arr.length - 1);
        }
    }
    public static void mergeSort(int[] arr, int L, int R) {
        if (L != R) {
            int mid = (L + R) / 2;
            mergeSort(arr, L, mid);
            mergeSort(arr, mid + 1, R);
            merge(arr, L, mid, R);
        }
    }
    public static void merge(int[] arr, int start , int mid, int end) {
        int[] helpArr = new int[end - start + 1];
        int i = start;
        int j = mid + 1;
        int k = 0;
        while (i <= mid && j <= end) {
            helpArr[k++] = arr[i] <= arr[j] ? arr[i++] : arr[j++];
        }
        while (i <= mid) {
            helpArr[k++] = arr[i++];
        }
        while (j <= end) {
            helpArr[k++] = arr[j++];
        }
        for (int index = 0; index <= end - start; index++) {
            arr[start + index] = helpArr[index];
            System.out.println(helpArr[index]);
        }
    }

 

标签:总结,arr,方式,int,mid,length,static,排序,public
From: https://www.cnblogs.com/carryup/p/17279698.html

相关文章

  • PTA题目集1~3的总结性Blog
    (1)前言: 目前发布了三次pta作业,第一次作业的题量适中,较为简单,主要了解了substring函数,math类,charAt方法的使用;在第二次作业中,首次出现了菜单计价程序编写的题目,题目量少但难度高,其中主要学习了StreamTokenizer快速输入的方法,类与类之间的调用联系,equal方法的使用等等;而在第三次的......
  • 这可能是最全面的Spring面试题总结了
    Spring是什么?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring的优点通过控制反转和依赖注入实现松耦合。支持面向切面的编程,并且把应用业务逻辑和系统服务分开。通过切面和模板减少样板式代码。声明式事务的支持。可以从单调繁冗的事务管理代码中解脱......
  • 记一个C#排序
    usingSystem;namespacePX;publicclassPXTest{publicstaticvoidShow(){ScoreInfoscoreInfo=newScoreInfo(){ID=1,Name="张三",CSharp=12,DataStruct=24,......
  • PTA题目集1~3次总结
        当我第一次开始学习Java编程时,我感到非常兴奋和好奇。我知道Java是一门非常流行和强大的编程语言,广泛用于许多不同领域的应用程序开发。经过上学期学习c语言的经历,我在一开始自信满满。但是随后来自老师的命令几岁了我的幻想。在得知我们需要自学基本语法时,我开始通过......
  • java题目集1~3的总结性Blog
    一、前言经历前三次java题目集的话,应该也算是相对了解了java这门语言了,因为有了c语言的基础在里面,所以一部分基础的语法部分就理解来说的话不算是很困难,但从面向过程到面向对象的一个思想观念的改变让我有些不适应。如果把编写代码比作下棋的话,那么面向过程就是一步一步的下......
  • python的类继承总结
    参考文档:https://blog.csdn.net/yilulvxing/article/details/85374142总结如下:第一种情况:子类和父类都有__init__(self)方法情况继承研究#如果子类也有init方法,那么调用父类的实例属性必须要在子类的init()方法中有这个super().__init__()【这点尤其要注意】#如果子类也有in......
  • 每日总结2023-04-01
    今天完成了部分界面并修改了部分之前的界面成果:广告收益界面,LIstView中没有数据,暂时没有显示第二个界面用于车主添加产品类别,登记种类和数量第三个界面美化第四个界面为设备绑定界面 ......
  • 2023/04/01每日总结
    今天学习html,发现web页面不会做,现在从头开始学。准备做一个课表 ......
  • AcWing第97场周赛复盘总结
    4944.热身计算-AcWing题库给定两个正整数$a,b$,请你分别计算$\min(a,b)$以及$\lfloor\frac{|a-b|}{2}\rfloor$的值。$\lfloor\frac{|a-b|}{2}\rfloor$表示不大于$\frac{|a-b|}{2}$的最大整数。输入格式共一行,包含两个正整数$a,b$。输出格式共一......
  • 计算机网络学习总结(进程之间的通信)
    进程之间通信的方式之一是利用socket最近学习了计算机网络的一些知识,下面是我自己的一些简单理解,可能有些错误的地方(狗头保命)首先长报文在发送的时候是以分组的形式发送的,由应用层发送应用层报文到运输层然后运输层对接收到的每个分组加上一个运输层首部,然后发送到网络层网络......