讲讲几种常见的排序算法(一)
堆排序
思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点(大顶堆反之)。
构建完一个小顶堆后,开始排序。 将最后一个节点和第一个节点交换位置(根节点是最小的,最小的顶点放到了后面),交换后进行调整,保持小顶堆(次小的顶点到了根节点)。
依次执行下去,这样每一次交换将最小的顶点的放到了最后,所以最后数组会从大到小排列。
public static void heapSort(int array[]) { int j=array.length; //构建堆 for (int i = j/2-1; i >=0; i--) { f(i,j,array); } //堆排序,从后面的节点开始更第一个节点交换位置,然后进行调整,这样数组将从大到小排列 for (int i = j-1; i>=0; i--) {// System.out.println(array[0]); swap(array,i,0); f(0,i,array); } } public static void f(int low,int high,int array[]) { int i=low; int j=2*i+1; int temp=array[i]; &nbs