欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

排序算法:快速排序

程序员文章站 2022-03-24 15:35:31
...

十大经典排序算法(动图演示)

 

public static void quickSort(int[] a, int start, int end) {
    if (start < end) {
		int baseNum = a[start];// 选基准值
		int i = start;
		int j = end;
		while (i != j) {
			while ((a[j] >= baseNum) && i < j) {
				j--;
			}
			while ((a[i] <= baseNum) && i < j) {
				i++;
			}
			
			if (i <	j) {
				int temp = a[i];
				a[i] = a[j];
				a[j] =  temp;
			}
		}
		
		//最终将基准数归位
        a[start] = a[i];
        a[i] = baseNum;
	    
        quickSort(a, start, i-1);
        quickSort(a, i + 1, end);
    }
}

 

堆排序

var len;    // 因为声明的多个函数都需要数据长度,所以把len设置成为全局变量
 
function buildMaxHeap(arr) {   // 建立大顶堆
    len = arr.length;
    for (var i = Math.floor(len/2); i >= 0; i--) {
        heapify(arr, i);
    }
}
 
function heapify(arr, i) {     // 堆调整
    var left = 2 * i + 1,
        right = 2 * i + 2,
        largest = i;
 
    if (left < len && arr[left] > arr[largest]) {
        largest = left;
    }
 
    if (right < len && arr[right] > arr[largest]) {
        largest = right;
    }
 
    if (largest != i) {
        swap(arr, i, largest);
        heapify(arr, largest);
    }
}
 
function swap(arr, i, j) {
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
 
function heapSort(arr) {
    buildMaxHeap(arr);
 
    for (var i = arr.length - 1; i > 0; i--) {
        swap(arr, 0, i);
        len--;
        heapify(arr, 0);
    }
    return arr;
}