基本排序算法总结

来源:互联网 发布:网络建设与管理试题 编辑:程序博客网 时间:2024/06/10 19:57

1、选择排序

      首先找到数组中最小的元素,然后将其与第一个元素交换,如果最小元素是自己,就和自己交换。然后继续找后面元素中最小,与第二个元素交换,如此往复,直到最后一个元素。

排序代码如下

public static void Sort(Comparable[] a) //选择排序{int N = a.length;for (int i = 0; i < N; i++) {for (int j = i+1; j < N; j++) {int min = i;if(less(a[j], a[min])) min = j;exch(a,i,min);}}}


2、插入排序

从第二个元素开始,与前一个元素相比,如果是小于,则交换,以此类推,直到元素到达最左边,或者比前一个元素大。

排序代码如下

public static void Sort(Comparable[] a) {int n = a.length;for(int i = 0; i < n; i++) {for (int j = i; j > 0; j--) {if(less(a[j], a[j-1])) {exch(a, j, j-1);}else break;}}}
3、希尔排序

以插入排序为基础,每次移动h个单位,h = 3*h+1.目的是使得数组通过前几次的排序使得其基本有序,最后当h = 1时利用插入排序可以很快将其排序

排序代码

public static void Sort(Comparable[] a) {int n = a.length;int h = 1;while (h < n/3) h = 3*h+1;while(h>=1) {for(int i = h; i < n; i++) {for (int j = i; j >= h; j-=h) {if(less(a[j], a[j-h]))exch(a, j, j-h);else break;}}h = h/3;}}
示意图如下

4、归并排序(目前比较厉害的排序算法)

归并排序利用分治思想,将待排序的序列分成两个小的序列,将两个小序列排序后,并在一起。

示意图如下:

递归代码如下:

    private static void sort(double[] a, double[] aux, int lo, int hi) {        if (hi <= lo) return;        int mid = lo + (hi - lo) / 2;        sort(a, aux, lo, mid);        sort(a, aux, mid + 1, hi);        Merge(a, aux, lo, mid, hi);    }


 
原创粉丝点击