8.排序算法

十大排序算法

 

  •  以上表格是基于数组进行排序的一般性结论
  • 冒泡,选择,插入,归并,快速,希尔,堆排序,属于比较排序(Comparison Sorting)

1)冒泡排序(Bubble Sort)

算法描述

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 重复步骤1~3,直到排序完成。

代码实现

public class BubbleSort {
    public static void main(String[] args) {
         int[] array = {56,9,10,19,28,37,34,1,3,5,7};
         for (int end = array.length-1;end>0;end--){
             for (int begin = 1;begin<=end;begin++){
                 if (array[begin] < array[begin-1]){
                     int tmp = array[begin];
                     array[begin]=array[begin-1];
                     array[begin-1]=tmp;
                 }
             }
         }


         for (int i =0;i<array.length;i++){
             System.out.print(array[i]+"_");
             //output:1_3_5_7_9_10_19_28_34_37_56_
        }
    }
}

2)选择排序(Selection Sort)

选择排序的交换次数要远远少于冒泡排序,平均性能优于冒泡排序

 算法描述

  1. 从序列中找出最大的元素,然后与最末尾的元素交换位置
  2. 忽略1中曾经找到的最大元素,重复执行步骤1

 代码实现

public class SelectionSort {
    public static void main(String[] args) {
        int[] array = {56, 9, 10, 19, 28, 37, 34, 1, 3, 5, 7};
        for (int end=array.length-1;end>0;end--) {
            int maxIndex = 0;
            for (int begin = 1; begin <= end; begin++) {
                if (array[maxIndex] < array[begin]) {
                    maxIndex = begin;
                }
            }
            int tmp = array[end];
            array[end] = array[maxIndex];
            array[maxIndex] = tmp;
        }

        for (int i =0;i<array.length;i++){
            System.out.print(array[i]+"_");
        //output:1_3_5_7_9_10_19_28_34_37_56 } } }

3)插入排序(Insertion Sort)

算法描述

  1. 在执行过程中,插入排序会将序列分为2部分:头部是已经排好序的,尾部是待排序的
  2. 从头开始扫描每一个元素,每当扫描到一个元素,就将它插入到头部合适的位置,是的头部数据依然保持有序

 

代码实现

public class InsertionSort {
    public static void main(String[] args) {
        int[] array = {56,9,10,19,28,37,34,1,3,5,7};
        for (int begin=1;begin<array.length;begin++){
            int current=begin;
            while (current > 0 && array[current] < array[current-1]){
                int tmp=array[current];
                array[current]=array[current-1];
                array[current-1]=tmp;
                current--;
            }
        }

        for (int i =0;i<array.length;i++){
            System.out.print(array[i]+"_");
            //output:1_3_5_7_9_10_19_28_34_37_56
        }
    }
}

 4)归并排序

posted @ 2020-07-27 20:53  大碗炸酱面  阅读(126)  评论(0编辑  收藏  举报