用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)

public static void main(String[] args) {    /**     * 冒泡排序     * 思路:每个轮次都让第一个数和其后所有的数进行轮比较,如果这轮的第一个数大则和其下一个数交换位置,如果他一直大则冒泡的最后一位     * 1、除了最后一位,前面的数都需要进行冒泡     * 2、第一轮,第一个数进行冒泡,和其后的数进行比较     * 3、第二轮,新序列的第一个数进行冒泡     */

    int[] ary=new int[]{90,50,40,60,55};    //外层循环控制有多少个数需要比较的轮数,最原始最后一位数不需要冒泡,数组长度减一    for (int i=1;i<ary.length;i++){        //内层循环控制每个轮次的第一个数比较换位的过程        for (int j=0;j<ary.length-1;j++){            //如果这个轮次的第一个数大于其后的数就一直换位,直到比他大的数出现,不换位了,新的序列生成            if (ary[j]>ary[j+1]){                int tmp;                tmp=ary[j];                ary[j]=ary[j+1];                ary[j+1]=tmp;            }        }    }    //foreach()遍历输出    for (int i:ary){        System.out.print(i+"\t");    }}运行结果:
 public static void main(String[] args) {    /**     * 选择排序     * 思路:从剩余数组中选择最小的数并获取它的的下标,然后把最小的数与剩余数组的第一个数进行交换位置     */

    int[] ary=new int[]{90,50,40,60,55};    //外层循环表示从剩余数组寻找最小值的轮数,数组长度为5的话,寻找4轮    for (int i=0;i<ary.length-1;i++){        //假定的最小值的下标,第一轮为ary[0],每次为剩余数组的第一个数        int minindex=i;        //j=i表示从剩余数组中查找最小数的下标        for (int j=i;j<ary.length;j++){            //如果假定的最小值大于其后的数,则更换下标            if (ary[minindex]>ary[j]){                minindex=j;            }        }        if (ary[i]!=ary[minindex]){            int tmp;            tmp=ary[i];            ary[i]=ary[minindex];            ary[minindex]=tmp;        }    }    //foreach()遍历输出    for (int a:ary){        System.out.print(a+"\t");    }}
运行结果:


    public static void main(String[] args) {        /**         * 插入排序         * 思路:第一轮,先把第一个数当成一个有序数组,把剩余的数从第一个开始逐个往假定的有序数组中插入,插入后还是有序的,         */        int[] ary=new int[]{50,30,40,10,20};        //错误思路//        for (int i=1;i<5;i++){//            for (int j=0;j<i;j++){//                if (ary[j]>ary[i]){//                    int t;//                    t=ary[j];//                    ary[j]=ary[i];//                    ary[i]=t;//                }//            }//        }        for (int i=1;i<5;i++){            int tmp=ary[i];            int j;            //i代表假定的有序数组的长度,i-1代表有序数组的最后一位的下标            for ( j=i-1;j>=0;j--){                //如果有序数组中的数大于待插入的数,则此数和其后的数都向后移动一位                if (ary[j]>tmp){                    ary[j+1]=ary[j];                }else{                    break;                }            }            //循环结束后,插入待插入的数,这个时候j的值是-1或者是有序数组中比待插入数小的数的下标,不加1的话会插错位置,所以j要加1            ary[j+1]=tmp;        }

        //使用Arrays工具类对数组排序        Arrays.sort(ary);        //foreach()遍历输出        for(int a:ary){            System.out.print(a+"\t");        }    }
运行结果:
 


原文地址:https://www.cnblogs.com/liusir123/p/11393671.html

时间: 2024-08-29 15:00:55

用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)的相关文章

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

java七大排序——3_选择排序

选择排序: 将待排元素分为有序区间和无序区间,无序区间在前,每次从无序区间的所有元素中选出一个最大的数array[max],将该数与无序区间最后一个数进行交换(相当于在有序区间的第一位置新插入一个数)假设开始全部元素都是无序区间内的:继续重复上述操作 最终结果代码实现 public static void selectSort(int[] array) {// //无序区间在前边 //每次选最大数 for (int i = 0; i < array.length - 1; i++) { int

选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

Java实现升序排列的整形数组A,元素两两不相等找出A[i]=i的数据

import java.util.ArrayList; //升序排列的整形数组A,元素两两不相等.请设计高效的算法找出A[i]=i的数据. //使用二种方法 public class BinarySearch { public static void main(String[] args) {     int[] nums={-1,1,2,3};     ArrayList<Integer> res=find(nums);     for(int e:res){      System.out

java怎么定义一个二维数组?

java中使用 [][] 来定义二维数组 定义数组时也可同时初始化 下面是一些例子float[][] numthree; //定义一个float类型的2维数组numthree=new float[5][5]; //为它分配5行5列的空间大小numthree[0][0]=1.1f; //通过下标索引去访问 1行1列=1.1long[][] numfive=new long[5][]; //定义一个long类型的不规则数组numfive[0]=new long[5]; //为第1行分配5列//定义d

JAVA基础-数组的排序(选择排序和冒泡排序),总结精辟!!!

1.-------寄语 对于初学JAVA的同学来说,排序是在陌生不过的一个基础题了.但是由于自己刚刚步入学习JAVA的世界,很多东西不能很好的理解,导致自己虽然可以敲出代码或者大致能够想明白, 但是对于解决问题的思想并没有很好的深入.(其实一开始学习也没必要太刨根问底,等到自己有一定的基础了,有时间了再研究一下.抱着研究的态度感觉会更好一点.其实大部分目前的 开发者都是经过了一段时间的培训,在培训的过程中,课程速度特别快,有时候我们必须要“不拘小节”,掌握培训中的主流知识才是明智之举.如果你正在

Java实现数组的冒泡,选择,插入排序

[笔记]冒泡,选择,插入三者的排序算法时间复杂度均是O(N2)级,排序主要是执行比较和交换(复制)操作,相对来说:选择排序较冒泡排序减少了交换次数:而插入排序左边是一直保持有序的.[参考书籍]Java数据结构与算法 以下是源代码,针对数组的操作,存取元素为基本类型: 1 import java.util.Random; 2 3 class HighArray{ 4 private long[] array; 5 private int nElems,i_mark; 6 public HighAr

java中数组的排序,选择排序法

要求:对数组arr[]进行选择排序法排序. 思路: 1,从第一个元素(角标是0)开始,和它后面的每一个元素进行比较,把较小的数存放在第一个元素中,这样,第一个元素就是最小的值. 2,从第二个元素开始,和它后面的每一个元素进行比较,把较小的数存放在第二个元素中,这样,第二个元素就是除第一个外最小的值. 3,继续.... 4,倒数第二个元素(角标是length-2),和倒数第一个元素(length-1)对比,较小的放在倒数第二个元素里面. 至此,排序完毕. 实现代码: //选择排序 public s

过三关 Java冒泡排序选择排序插入排序小练习

材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选择用插入排序法,来进行排序. 测试类: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //功能:猴子排序 public class MonkeySelect {