首页 > 其他分享 >简单排序方式

简单排序方式

时间:2022-11-10 09:25:25浏览次数:42  
标签:12 方式 int 56 元素 34 简单 297 排序

冒泡排序

对于数组个数比较少的,我们可以采用冒泡排序的方法来进行排序,他的原理其实是利用两层循环来进行比较,如果n个数要进行排序,那至少要进行n-1次的回合,而且每次需要排n-i次,就像吐泡泡一样,因此可以进行以下代码的编写

 1 public static void main(String[] args) {
 2         //冒泡排序法,外层控制循环的趟数n-1,内层控制比较的次数n-i
 3         int[] a={20,100,30,1,12,1,120,32};
 4         int len=a.length;
 5         for (int i = 1; i < len; i++) {
 6             for(int j=0;j<len-i;j++){
 7                 if(a[j]>a[j+1]){
 8                     int temp=a[j];
 9                     a[j]=a[j+1];
10                     a[j+1]=temp;
11                 }
12             }
13         }
14         System.out.println(Arrays.toString(a));
15     }

对于数组个数很多的,我们可以采用其他方法排序,能有效提高计算机的运行速度,冒泡法每次都要去比较所以会相对比较而言比较慢

插入排序

插入排序的原理:将指针指向某元素(一般从第二个元素开始),假设该元素的左侧全部有序,将该元素抽取,然后按照从右往左的顺序分别与其左边的元素进行比较,遇到较大的元素便将较大的元素往右移,直到找到比该元素小的或者最左面发现其右侧的元素都比他大的时候,停止,此时会出现一个空位,将指针所指向的元素放到空位中,此时该元素左侧的元素都比他小,右侧的元素都比他大,此时指针向后移一位,重复进行上述操作,毎操作一轮,左侧有序元素就加一个,右侧无序元素就少一个。

原理不是很好懂,但是用实际操作来讲就很容易理解,给定一组数:297,34,56,12

第一轮:指针最初第二个元素34,从右向左开始比较一次,只有一个元素297,297>34,将297后移,空出一个位置,将34填进去

得到:34,297,56,12

第二轮:指针指向下一个元素,56,从右向左开始比较两次,有两个元素34,297,其中297大于56,34小于56,找到比自己小的元素了,297往后移,56填补空位

得到:34,56,297,12

第三轮:指针指向下一个元素,12,从右向左开始比较三次,有三个元素34,56,297,297,56,34都比12大,找不到比自己小的元素,其他元素往右移,空出第一个元素的位置,此时12填入

得到:1,34,56,297

int[]a={12,87,32,34,2,6};
int len=a.length;
for (int i = 1; i < len; i++) {//从第二个元素开始从右往左比较
int temp=a[i];//将a【i】抽出来进行比较
int leftIndex=i-1;//左边元素索引值为i-1
 while (leftIndex>=0&&a[leftIndex]>temp)//向右移
{
 a[leftIndex+1]=a[leftIndex];//左边元素值移到右边元素
leftIndex--;//如果左边还是大于右边,索引值往左,而且必须大于零在循环条件里面加上
}//移完之后,空出一个位置a[左边空出的索引,原本是i,后来变成了leftindex+1],需要用a【i】去填补
a[leftIndex+1]=temp;
}
System.out.println(Arrays.toString(a));

选择排序

选择排序的原理:

从第一个元素开始,分别于后面的元素相比较,遇到最小值就交换位置,第一轮结束;从第二个元素开始,分别与后面的元素相比较,找到倒数第二小的元素,并交换位置,重复上述步骤,直到排序完成。

定义一个数组:int[] a={12,34,16,7};

第一轮:

指针指向第一个元素12,先与34作比较,最小还是12;再与16作比较,最小还是12;再与7作比较,最小值7。

输出结果:7,34,16,12

第二轮:

指针指向第二个元素,先与16作比较,最小16,交换;再与7做比较,最小7,交换

输出结果:7,12,16,34

第三轮:

指针指向第三个元素,与34做比较,最小16

输出结果:7,12,16,34

public static void main(String[] args) {
        int[] array={12,8,24,6};//定义一个数组
        //第一轮排序
        int len=array.length;
        for (int i=0;i<len-1;i++){
            int min=array[i];//每一轮回的最小值都是array[i]
            int minIdenx=i;//最小值的索引值每一轮回都是i
            for(int j=i+1;j<len;j++){
            if(min>array[j]){//如果前面的值大于后面的值,最小值为后面的
                min=array[j];
                minIdenx=j;//找到最小值的索引
            }
            }
            if(i!=minIdenx){//如果最小值是自己可以不用进行下面交换
            int temp=array[i];
            array[i]=min;
            array[minIdenx]=temp;
            }
        }
        System.out.println(Arrays.toString(array));
    }

原理很好懂,但是感觉每次都要与最小值交换会有点多余,代码还是自己多敲敲,可以直接用最值得索引来进行交换值

      int[] a={67,389,47,489,2};
        int len=a.length;
        for (int i = 0; i < len-1; i++) {
            int minIdex=i;
            for(int j=i+1;j<len;j++){
                if(a[minIdex]>a[j]){
                    minIdex=j;
                }
            }
            if(i!=minIdex){
                int temp=a[i];
                a[i]=a[minIdex];
                a[minIdex]=temp;
            }
        }
        System.out.println(Arrays.toString(a));

标签:12,方式,int,56,元素,34,简单,297,排序
From: https://www.cnblogs.com/Liku-java/p/16875931.html

相关文章

  • 工程中的耦合与解耦方式
    复用与解耦,是推动软件工程技术发展的两大思想溯源。谈到解耦,就不能不先谈耦合。耦合,是指两个软件组件之间有相互影响的或强或弱的关联关系。软件组件的范围涉及:函数、类、......
  • Java创建对象的5种方式
    new:最常见的方法Employeeemp1=newEmployee();newInstance()用newInstance()创建对象分2种1、使用class类的newInstance()方法需要有一个无参的构造方法,这个n......
  • Java集合简单介绍
    Java集合框架主要包括两种类型的容器,一种是Collection,存储一个元素集合,另一种是Map,存储键/值对映射。一、Collection集合List集合特点:有序可重复ArrayList集合(内部......
  • oracle游标简单使用
    游标用来临时存放查询的结果集--查看TEST用户的表空间,用户名大写select*fromdba_tablesccwherecc.OWNER='TEST'--先看看当前表空间有哪些表sele......
  • 简简单单对比encodeURI与encodeURIComponent
    encodeURI和encodeURIComponent是两个很相近的方法,用来encodeURI。但是他们之间也存在着细微的差异,如果不能很好的理解这个差异,可能会导致一些不必要的麻烦。本文将尝试用......
  • 面试:排序算法代码实现
    目录冒泡排序插入排序希尔排序选择排序堆排序冒泡排序/*====================冒泡排序=======================*/voidbubble_sort(intnums[],intn){for(int......
  • ArrayBlockingQueue简单介绍
    ArrayBlockingQueue是一个用数组实现的环形队列,在构造方法中,会要求传入数组的容量创建数组长度为10的有界队列,数据类型为字符串BlockingQueue<String>blockingQueue=......
  • 【python】程序员最浪漫的表白方式,将情书写在她的照片里
    前言大家早好、午好、晚好吖~这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的。不过......
  • 单例模式实现的多种方式,pickle序列化模块,选课系统整体搭建
    目录单例模式实现的多种方式,pickle序列化模块,选课系统整体搭建今日内容概要今日内容详细单例模式实现的多种方式pickle序列化模块选课系统需求分析功能提炼选课系统架构设......
  • 常见的排序和查找算法
    常见算法常见的七种查找算法:​ 程序=数据结构加算法,数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天会涉及部分数据结构的专......