8.排序算法
十大排序算法
- 以上表格是基于数组进行排序的一般性结论
- 冒泡,选择,插入,归并,快速,希尔,堆排序,属于比较排序(Comparison Sorting)
1)冒泡排序(Bubble Sort)
算法描述
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤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中曾经找到的最大元素,重复执行步骤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)
算法描述
- 在执行过程中,插入排序会将序列分为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)归并排序