java几种常用的排序算法的实现

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/f2764052703/article/details/88944223

冒泡排序(BubbleSort)

冒泡排序是一种每次找到最值的排序方法,找到最值以后通过比较的过程将它放在数组的一端,下次遍历时就不再去看它,只用将剩下的数组遍历,从剩下数组中找到最值,并将它放到一端。

代码如下:

package study06_base;

public class sort {
    public static void main(String[] args) {
        int[] arr = {1 ,2 ,5 ,7 ,3 ,9 ,4 ,0 ,6 ,8};

        // 冒泡排序
        // 通过遍历依次确定最大值(最小值),次值,直到最小值(最大值),看所需要的顺序

        // 从小到大排序
        for (int i = 1 ; i <= arr.length ; i++) {
            for (int j = 0 ; j < arr.length-i ; j++) {
                if (arr[j] > arr[j+1]){
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        for (int index: arr) {
            System.out.print(index + " ");
        }

        System.out.println();

        // 从大到小排序
        for (int i = 1 ; i <= arr.length ; i++) {
            for (int j = 0 ; j < arr.length-i ; j++) {
                if (arr[j] < arr[j+1]){
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        for (int index: arr) {
            System.out.print(index + " ");
        }
    }
}

步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对第0个到第n-1个数据做同样的工作。这时,最大的数就“浮”到了数组最后的位置上。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。



选择排序 SelectionSort

选择排序是最直观的排序,就像我们现在有一副扑克牌,需要将它进行排序,如果我们要从小到大进行排序,那么,我们会先从中找到所有的A,其他牌的顺序不做处理,然后将A放在所有扑克牌的最上面,然后找到所有的2,重复这个过程,直到排序结束。

代码如下:

	package study06_base;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {1 ,2 ,5 ,7 ,3 ,9 ,4 ,0 ,6 ,8};

        //从小到大排序
        for (int i = 0 ; i < arr.length ; i++){
            int index = i;     //  最小元素下标,因为每次只用从尚未排序的数组中找最小值,所以让index = i
            for (int j = i+1 ; j < arr.length ; j++){  // 遍历数组找到最小值
                if (arr[j] < arr[index]){
                    index = j;      // 标记此时找到的最小元素的下标
                }
            }
            // 将找到的最小值放在未排序数组的最前端
            int temp;
            temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }


        for (int a:arr) {
            System.out.print(a+" ");
        }


        System.out.println();

        //从大到小排序
        for (int i = 0 ; i < arr.length ; i++){
            int index = i;     //  最大元素下标,因为每次只用从尚未排序的数组中找最大值,所以让index = i
            for (int j = i+1 ; j < arr.length ; j++){  // 遍历数组找到最大值
                if (arr[j] > arr[index]){
                    index = j;      // 标记此时找到的最大元素的下标
                }
            }
            // 将找到的最大值放在未排序数组的最前端
            int temp;
            temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }


        for (int a:arr) {
            System.out.print(a+" ");
        }
    }
}

步骤:

  1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 以此类推,直到所有元素均排序完毕。

猜你喜欢

转载自blog.csdn.net/f2764052703/article/details/88944223