JAVA八大排序算法

[toc]

JAVA八大排序算法

插入排序

解释

总体思路:
位于表中后面的元素依次与表中前面的元素进行比较,如果比它小,就需要继续和更前面的元素比较,直到遇到一个比它大的元素或者是比较到第一个元素。
具体

  1. 先将第一个元素视为有序,用第二个元素与第一个元素进行比较,如果比第一个小,就插入到第一个元素之前;第三个元素再依次与第二个元素,第一个元素进行比较;第四个元素再依次与第三个,第二个,第一个元素进行比较... 通过这样依次的比较分别插入到合适的位置形成一个有序表。
  2. 不管初始序列如何,总需要N-1趟排序,第一趟是第二个参数与第一个参数的比较;第二趟是第三个元素与前2个元素的比较;第三趟是第四个元素与前3个元素的比较...
  3. 当初始序列有序时,第一趟只需要比较一次,第二趟只需比较一次...所以总共只需要比较N-1次就可以完成排序。当初始序列逆序的时候,第一趟比较一次,第二趟比较二次...第N-1趟比较N-1次。总共比较n(n-1)/2次。
  4. 直接插入排列是基于明确的相邻位置的两个元素的比较,因此该算法是稳定的。排序过程的比较次数与待排序列的初始状态有关。每进行一趟排列并不能唯一地确定下一个元素的最终位置。

代码实现

 /**
     * 插入排序
     *
     * @param array
     */
    private static void sortInsert(int[] array) {
        int length = array.length;
        int insertNum;
        for (int i = 1; i < length; i++) {
            insertNum = array[i];
            int j = i - 1;
            while (j > 0 && array[j] > insertNum) {
                array[j + 1] = array[j];
                j--;
            }
            array[j + 1] = insertNum;
        }

        for (int i :
                array) {
            System.out.print(i + "   ");
        }
    }

冒泡排序

解释

总体思路
比较2个相邻的数,将值大的元素交换到右端,因此,进行完第一个排序后,必然会唯一确定出最大的元素;进行完第二趟排序后,必然会确定出第二大的元素...
具体

  1. 因为它是基于相邻两个元素之间的比较,因此它的算法是稳定的
  2. 当元素初始序列是有序的情况下,在一趟冒泡排序中只需要进行N-1次比较,没有进行交换操作就可以完成排序
  3. 当元素初始序列是有序的情况下,第一趟N-1次选出最大元素,第二趟N-2次选出第二大元素...平均的时间复杂度为o(n^2)。

代码实现

 /**
     * 冒泡排序
     *
     * @param array
     */
    public static void sortBubble(int[] array) {
        int length = array.length;
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - 1 - i; j++) {
                if (array[j]>array[j+1]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
    }

你可能感兴趣的:(JAVA八大排序算法)