一:经典的冒泡排序

相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。

//①.先声明一个数组长度为10
         int[] arr = new int[10];
        //②.数组元素进行赋值(随机对其进行赋值)0-100
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        //遍历数组,用增强for循环
        for (int tmp : arr) {
            System.out.print(tmp + " ");
        }
        System.out.println();
//冒泡排序数组的下角标0-length-1进行对比(数组元素大小)arr[j]>arr[j+1]
for (int i = 0; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length - i - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            int tmp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        }
    }
}
//遍历数组
System.out.println();
for (int tmp : arr) {
    System.out.print(tmp + " ");
}

运行结果如下

Java for循环筛选集合最大值和最小值 java循环比较大小_java

算法的时间效率:从冒泡排序的算法可以看出,若待排序的元素为正序,则只需进行一趟排序,比较次数为n-1次,移动元素次数为0;若待排序的元素为逆序,则需要进行n-1趟排序。

算法的空间效率:空间效率很高,只需要一个附加程序单元用于交换,其空间效率为O(1)

算法的稳定性:稳定

二:选择排序

将待排序的元素分为已排序(初始为空)和未排序两组,依次将未排序的元素中值最小的元素放入已排序的组中。直接选择排序简单直观,但性能略差;堆排序是一种较为高效的选择排序方法,但实现起来略微复杂

for (int i = 0; i <arr.length-1 ; i++) {
    //声明一个变量保存最小值
    int minindex=i;
    for (int j = i+1; j <arr.length; j++) {
        if(arr[j]<arr[minindex]){
            arr[minindex]=arr[j];
        }
    }
    if (minindex!=i){
        int tmp1=arr[i];
        arr[i]=arr[minindex];
        arr[minindex]=tmp;
    }
}
for (int i : arr) {
    System.out.print(i+" ");
}

Java for循环筛选集合最大值和最小值 java循环比较大小_数据结构_02

算法的时间效率:无论初始状态如何,在第i趟排序中选择最小关键码的元素,需做n-i次比较,因此总的比较次数为:

Java for循环筛选集合最大值和最小值 java循环比较大小_数据结构_03

算法的空间效率:空间效率很高,只需要一个附加程序单元用于交换,其空间效率为O(1)

算法的稳定性:不稳定

三:使用ljava.util.Arrays类的sort()方法提供了数组元素排序功能

Arrays.sory(arr);
//遍历数组
for (int i : arr) {
     System.out.print(i+" ");
}

Java for循环筛选集合最大值和最小值 java循环比较大小_数据结构_04

排序算法分为内部排序和外部排序

内部排序:整个排序过程不需要借助外部储存器(如磁盘等),所有排序操作都在内存空间中完成。

外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部储存(如磁盘),外部排序最常见的是多路归并排序,可以为外部排序是由多次内部排序完成

选择排序

直接选择排序、堆 排序

交换排序

冒泡排序、快速 排序

插入 排序

直接插入排序、 折半插入排序 、 Shell 排序

归并排序

桶式排序

基数排序


                              各种内部排序方法性能比较

1.从平均时间而言:快速排序最佳。但在最坏情况下时间性能不如堆排序和归并排序。

2.从算法简单性看:由于直接选择排序、直接插入排序和冒泡排序的算法比较简单,将其认为是简单算法,都包含在上图的“简单排序”中。对于Shell排序、堆排序、快速排序和归并排序算法,其算法比较复杂,认为是复杂排序。

3.从稳定性看:直接插入排序、冒泡排序和归并排序时稳定的;而直接选择排序、快速排序、 Shell排序和堆排序是不稳定排序

4.从待排序的记录数n的大小看,n较小时,宜采用简单排序;而n较大时宜采用改进排序。

                                排序方法的选择

(1)若n较小(如n≤50),可采用直接插入直接选择排序

当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接冒泡或随机的快速排序为宜;

(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序堆排序归并排序