Java十大排序算法(有待更新)

首先,先用随机数生成一组长度为30的数组。

		Random rand = new Random();
        int[] arr = new int[30];
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = rand.nextInt(100);
        }
        //遍历输出未排序的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }
        //输出数组后换行
        System.out.println();




1.冒泡排序
在这里插入图片描述
代码如下:

		for (int i = 1,t; i < arr.length; i++) {
    
    
            for (int j = 0; j < arr.length-i; j++) {
    
    
            	//数组内数值两两相比,得出一个最大值
                if (arr[j]>arr[j+1]) {
    
    
                    t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
                }
            }
        }
        //遍历输出排序后的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }

控制台结果为:
在这里插入图片描述
第一行是随机生成的数组,第二行是冒泡排序后的数组。





2.选择排序
在这里插入图片描述
代码如下:

		for (int i = 1,maxIx,maxValIx,t; i < arr.length; i++) {
    
    
            //假设最大值所在位置的数组下标为0
            maxValIx = 0;
            //每次循环最大值应处位置的下标
            maxIx = arr.length-i;
            for (int j = 1; j <= maxIx; j++) {
    
    
                if (arr[maxValIx]<arr[j]) {
    
    
                	//最大值所在位置的数组下标后移
                    maxValIx = j;
                }
        }
            //最大值所在位置的数组下标 和 最大值应处位置的下标不相同
            if (maxIx != maxValIx){
    
    
            	//两个下标所在位置的值互相交换
                t = arr[maxIx];
                arr[maxIx] = arr[maxValIx];
                arr[maxValIx] = t;
            }
        }
        //遍历输出排序后的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }

控制台结果为:
在这里插入图片描述
第一行是随机生成的数组,第二行是选择排序后的数组。





3.插入排序
在这里插入图片描述
代码如下:

		for (int i = 1,t,j; i < arr.length; i++) {
    
    
            if (arr[i]>=arr[i-1]) continue;
            t = arr[i];
            //在数值 t 所在的下标之前查找大于 t 的值
            for (j = i-1; j>=0 && arr[j]>t; j--) {
    
    
                arr[j+1] = arr[j];
            }
            //循环结束后,将 t 的值放到循环结束时下标的后一个位置
            arr[j+1] = t;
        }
        //遍历输出排序后的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }

控制台结果为:
在这里插入图片描述
第一行是随机生成的数组,第二行是插入排序后的数组。





4.希尔排序
在这里插入图片描述
代码如下:

		//定义一个间距值,给数组分组
		int step = arr.length,t;
        while ((step/=2)>=2){
    
    
            for (int i = 0; i+step < arr.length; i++) {
    
    
            	//分组内排序
                if (arr[i]>arr[i+step]){
    
    
                    t = arr[i];
                    arr[i] = arr[i+step];
                    arr[i+step] = t;
                }
            }
        }//希尔排序结束
        //最后用插入排序,完成整个数组的排序,此时的插入排序效率很高
        for (int i = 1,j; i < arr.length; i++) {
    
    
            if (arr[i]>=arr[i-1]) continue;
            t = arr[i];
            for (j = i-1; j>=0 && arr[j]>t; j--) {
    
    
                arr[j+1] = arr[j];
            }
            arr[j+1] = t;
        }
        //遍历输出排序后的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }

控制台结果为:
在这里插入图片描述

第一行是随机生成的数组,第二行是希尔排序后的数组。





5.桶排序
在这里插入图片描述
代码如下:

		//定义常量U,分10个桶
		final int U = 10;
        int[][] bucket = new int[U][arr.length];
        int[] ixs  = new int[30];
        for (int i = 1,count,t;; i*=10) {
    
    
            count = 0;
            //遍历随机生成的数组
            for (int j = 0; j < arr.length; j++) {
    
    
            	//count用来控制循环结束
                count = (t=arr[j]/i)>=1 ? ++count : count;
                //把生成的数组的值对应放到桶里
                bucket[t%=U][ixs[t]++]=arr[j];
            }
            //控制循环结束
            if (count==0) break;
            //遍历桶里的数组
            for (int j = 0,ix=0; j < bucket.length; j++) {
    
    
                for (int k = 0; k < ixs[j]; k++){
    
    
                	//把桶里的数组的值对应放回原数组里
                    arr[ix++] = bucket[j][k];
                }
            }
            //每个桶里统计的存放的数值个数清零
            for (int j = 0; j < ixs.length; j++) {
    
    
                ixs[j] = 0;
            }
        }
        //遍历输出排序后的数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }

控制台结果为:
在这里插入图片描述
第一行是随机生成的数组,第二行是桶排序后的数组。








注明:文中使用到的排序示意图均出自 菜鸟教程 其余为本人原创,觉得有所收获的话点个赞吧~

猜你喜欢

转载自blog.csdn.net/weixin_48482704/article/details/108919976
今日推荐