排序算法:快速排序

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

 

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;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值