首页 > 其他分享 >拓展必学1.1 常见排序方法

拓展必学1.1 常见排序方法

时间:2023-05-02 22:44:33浏览次数:41  
标签:必学 1.1 int 元素 System 循环 numbers 排序

今天遇到了需要排序的题目,我们已知的就是用已有的算法进行排序,也就是使用Arrays.sort(nums[]),这个算法本质是快排,在算法比赛的时候可以使用,但是如果需要手撕代码就不可以了,所以我们需要积累常见的数组排序方法。

一、冒泡排序(改进版)

基本思想:
      冒泡排序(Bubble Sort)是一种简单的排序。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有需要交换,也就是说该数列已经排序完成。


算法描述
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

具体代码如下:

public static void BubbleSort(int[] numbers){
        //外层循环控制比较次数
        for (int i=0;i<numbers.length-1;i++){

            int flag=0;//默认标记为0
            //内层循环控制到达位置
            for (int j=0;j<numbers.length-1-i;j++){
                //比较前面的元素比后面元素大交换,同理也可以比较小
                if (numbers[j]>numbers[j+1]){
                    int temp=numbers[j];
                    numbers[j]=numbers[j+1];
                    numbers[j+1]=temp;
                    flag=1;//如果还有交换,标记为1
                }
            }

            if (flag==0){//如果没有交换过的元素,则已经有序了
                return;
            }
        }
    }

//调用
        int[] n={60,38,5,14,7,23,89,77,88,4,35,45,67,99,87};
        System.out.println(Arrays.toString(n));
        BubbleSort(n);
        System.out.println(Arrays.toString(n));
        
      //结果
System.out: [60, 38, 5, 14, 7, 23, 89, 77, 88, 4, 35, 45, 67, 99, 87]
System.out: [4, 5, 7, 14, 23, 35, 38, 45, 60, 67, 77, 87, 88, 89, 99]

 

需要注意的是:这个是冒泡排序改进版,也就是在内部循环的时候,可能会出现内部已经排好了,但是外部还在循环的情况(因为设置需要循环length-1次),所以这个时候我们设置一个flag,如果内部没有改动,则跳出循环,减少循环次数。

【易错】同时有个易错点!!内部循环的时候,是使用 j 变量,也就是内层循环的变量,不要用外层 i

 

标签:必学,1.1,int,元素,System,循环,numbers,排序
From: https://www.cnblogs.com/ljy888/p/17368454.html

相关文章

  • 排序_插入排序
    letArray=[36,34,334,45,233,544,87];//太麻烦而且交换的过程写的不对//console.log(insertSort(Array));//functioninsertSort(Array){//console.log(1);//leted=Array[0];//for(leti=1;i<Array.length;i++){//for(letj=1;j<i;j++){//......
  • Mapreduce二次排序时,将jar包上传至Hadoop上运行时,抛出异常"java.util.NoSuchElementEx
    查询原因后发现是java中实现实现Mapper时StringTokenizer类时使用了一个方法nextToken()会抛出这个异常,”我们可以使用hasMoreTokens()和hasMoreElements()方法来避免异常。如果标记器的字符串中有更多标记可用,则这两种方法都返回true。只有当hasMoreTokens()方法返回Tr......
  • Theano 中文文档 0.9 - 7.1.1 Python教程
    7.1.1Python教程译者:Python文档协作翻译小组,原文:Pythontutorial。本文以CCBY-NC-SA4.0协议发布,转载请保留作者署名和文章出处。Python文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。在本文档中,我们假设读者了解Python。如果你需要学习......
  • 有趣的插入排序
    原文点此跳转什么是插入排序(insertionSort)?在数组中从左到右依次取一个数出来,然后把它放到合适的位置。从思想上可以分为有序区和无序区,有序区在左边代表已经排列好的元素。算法步骤默认左边第一个元素已经在有序区了在无序区取一个数出来(第二个元素)遍历有序区元素,把取出来的元素放......
  • 选择排序
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt(); int[]q=newint[n];for(inti=0;i<n;i++)q[i......
  • 一篇文章讲明白冒泡排序
    原文点此跳转什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中"冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底,最右边就是水面,最左边的元素......
  • 修改切片器里的排序
    问题:数据透视表切片器的顺序如何改成从星期一起始。解决:添加自定义序列【文件】》【选项】》【自定义序列】,添加从星期一起始的序列。 刷新数据透视表以后切片器就以新的序列排序了。 ......
  • Python 希尔排序(Shell Sort)原理以及应用
    希尔排序的原理:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序的原理是将待排序的序列按照一定间隔分成若干个子序列,对每个子序列使用插入排序进......
  • Parallels Desktop 18 for Macv18.1.1(含M1M2)pd18完整版
    ParallelsDesktop18是一款虚拟机软件,能够让Mac电脑上运行Windows、Linux和其他操作系统的应用程序。此版本的ParallelsDesktop18提供了多项功能增强和改进,包括更快的性能、更好的图形处理、更简单的导入和导出虚拟机等。该软件还支持AppleM1芯片,可以在M1芯片上运行Windows和其......
  • pop 出栈,sorted临时排序,容器类型的数据,zip函数
    divmod(a,b)返回一对商和余数,结果和(a//b,a%b)一致 字典是Python中唯一的映射类型。 Python的源文件以"py"为扩展名,有python.exe解释运行,可在控制台下运行。"pyw"是图形开发用户接口(GUI)文件的扩展名,作为桌面应用程序,这种文件用于开发图形界面的,由pythonw.exe解释......