JAVA数组排序方式比较(举例四种)

比较数组的四种排序方式

package JAVA_Project_01_04;//创建一个包
/*
常用的排序方法有冒泡排序、快速排序、选择排序、插入排序、希尔排序、堆排序

冒泡排序是依次比较相邻的两个数,将大树放在前面,小数放在后面。即首先比较第一个和第二个数,将大数放前,小数放后。
如此继续,直至比较最后两个数,将大树放前,小数放后。然后下一行再进行重复操作。

选择排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经排好序的数列的最后,直到全部
待排序的数据元素排完。选择排序是不稳定的排序方法。

插入排序把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。
在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的正确位置中。

希尔排序是插入排序的一种。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成的d1个组。所有距离
d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上溯的分组和排序,直到所取的增量dt=1(dt<dt-1<......<d2<d1),
即所有记录放在同一组中进行直接插入排序为止。
 */
public class TextSort {//操作排序的类

    public static void bubbleSort(int[]x){//冒泡排序
        for (int i = 0; i < x.length; i++) {
            for (int j = i+1; j < x.length; j++) {
                if (x[i]>x[j]){//将下标为i的数与下标为j的数进行比较
                    int temp=x[i];
                    x[i]=x[j];//元素交换
                    x[j]=temp;
                }
            }
        }
        for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
            System.out.println(x[i]+"");
        }
    }

    public static void selectSort(int[]x){//选择排序
        for (int i = 0; i < x.length; i++) {
            int lowerIndex=i;
            for (int j = i+1; j < x.length; j++) {//循环找出最小的一个索引
                if (x[j]<x[lowerIndex]){
                    lowerIndex=j;
                }
            }
            int temp=x[i];
            x[i]=x[lowerIndex];
            x[lowerIndex]=temp;
        }
        for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
            System.out.println(x[i]+"");
        }
    }

    public static void insertSort(int[]x){//插入排序
        for (int i = 1; i < x.length; i++) {//i从1开始,因为第一个数已经是排序好的
            for (int j = i; j >0 ; j--) {
                if (x[j]<x[j-1]){
                    int temp =x[j];//元素交换
                    x[j]=x[j-1];
                    x[j-1]=temp;
                }
            }
        }
        for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
            System.out.println(x[i]+"");
        }
    }

    public static void shellSort(int[]x){//希尔排序
        for (int increment = x.length/2; increment >0; increment/=2) {//循环进行分组
            for (int i = increment; i < x.length; i++) {//循环每个组内排序
                int temp=x[i];
                int j=0;
                for (j = i; j>increment; j-=increment) {
                    if (temp<x[j-increment]){//元素进行判断、交换
                        x[j]=x[j-increment];
                    }
                    else {
                        break;
                    }
                }
                x[j]=temp;
            }
        }
        for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
            System.out.println(x[i]+"");
        }
    }

    public static void main(String[] args) {//Java主入口
        int[]arr={1,5,6,12,4,9,3,23,39,403,596,87};
        System.out.println("----冒泡排序的结果:");
        bubbleSort(arr);//调用方法
        System.out.println();
        System.out.println("----选择排序的结果:");
        selectSort(arr);//调用方法
        System.out.println();
        System.out.println("----插入排序的结果:");
        insertSort(arr);//调用方法
        System.out.println();
        System.out.println("----希尔排序的结果:");
        shellSort(arr);//调用方法
    }
}
/*
在bubbleSort()方法中,运用双重循环对数组进行冒泡排序。其中i,j控制数组的元素。将下标为i的元素与下标为j的元素进行比较,将较小的元素与较大的元素依次用中间变量进行转换。
得到的结果是较小的元素在前,较大的元素在后。然后排好序的数组元素打印到控制台。

在selectSort()方法中,运用选择排序法对数组进行排序。方法中第一层循环从起始位置开始选到最后一个元素,
主要是在每次进入第二层循环之前,将外层循环的下标赋值给临时变量lowerIndex,接下来在第二层循环中,如果发现有比下标为lowerIndex更小的元素,
则将赋值给lowerIndex,最后,在二层循环退出后,如果临时变量改变,则说明有比当前外层循环位置更小的元素,需要将这两个元素交换。

在insertSort()方法中,运用插入排序对数组进行排序。从第一个元素开始,该元素可以认为已经被排序。循环取出下一个元素,
在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于新元素,则将该元素移到下一位置,重复进行操作,
直到找到已排序的元素小于或者等于新元素的位置,再将新元素插入到该位置中。

在shellSort()方法中,先将数组进行分组,对分得的每个小组进行组内排序。在每个小组内对元素进行比较,
将每个小组组内的元素由小到大进行排序。再次循环分组,直到元素排序完毕。
 */
发布了70 篇原创文章 · 获赞 10 · 访问量 3204

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102545970