编程语言
首页 > 编程语言> > 算法之排序

算法之排序

作者:互联网

 

 

排序算法可以分为如图所示8种。只有数据非常大时(超过10亿)才用外部排序。

 

一. 冒泡排序(每遍历一次,两两进行比较,将较大或较小的数放在后面(交换位置))

package com.bzw.sort;

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {

        int[] array = {5,4,3,2,1};

        boolean flag = false;
        int count = 0;
        for (int i=0;i<array.length-1;i++){
            for (int j=0;j<array.length-1-i;j++){   //每遍历一次相当于选出当前数组中的最大值
                if (array[j] > array[j+1]){
                    flag = true;
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
                count++;
            }
            if (!flag){     //在一次遍历中一次都没有进行交换,说明排序已经完成,不必再往后循环了
                break;
            } else {
                flag = false;
            }
        }

        System.out.println(Arrays.toString(array));
        System.out.println("遍历次数" + count);

    }

}

 

二. 简单选择排序(先假设第一个数就是最大值或最小值,然后遍历找到真的最小值,交换位置)

package com.bzw.sort;

import java.util.Arrays;

public class ChooseSort {
    public static void main(String[] args) {
        int[] array = {4,3,-2,6,5};

        for (int i=0;i<array.length-1;i++){
            for (int j=i;j<array.length;j++){
                if (array[j] < array[i]){
                    int temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

 

三. 直接插入排序(从头开始遍历,每遍历到一个数与前面的数进行比较,当有一个数比这个数小时,就插在这个数后面。)

package com.bzw.sort;

import java.util.Arrays;

public class InsertSort {
    public static void main(String[] args) {
        int[] array = {2, 1, 5, -3, 4, 2, -5, 9};

//        自己写的代码,没有老师写的通俗易懂
//        for (int i=0;i<array.length;i++){
//            for (int j=0;j<i+1;j++){
//                if (array[i] < array[j]){
//                   int temp = array[i];
//                    int k = i;
//                    while ( j != k ){
//                        array[k] = array[k-1];
//                        k--;
//                    }
//                    array[j] = temp;
//                }
//            }
//        }
//        System.out.println(Arrays.toString(array));
//    }

//        老师代码
        for (int i = 0; i < array.length; i++) {
            int insertVal = array[i];
            int insertIndex = i - 1;

            while (insertIndex >= 0 && insertVal < array[insertIndex]) {
                array[insertIndex + 1] = array[insertIndex];
                insertIndex--;
            }
            //insertIndex + 1 即为要插入的位置
            array[insertIndex + 1] = insertVal;


        }
        System.out.println(Arrays.toString(array));
    }
}

 

标签:insertIndex,遍历,int,Arrays,算法,array,排序,public
来源: https://www.cnblogs.com/tiger2048/p/14106319.html