八大排序算法-堆排序

八大排序算法-堆排序算法思想将待排序的序列构成一个大顶堆,然后拿出堆顶,将剩余的数列构成一个大顶堆。以此类推,最终得到一个有序数列算法实现PHP实现<?

欢迎大家来到IT世界,在知识的湖畔探索吧!

算法思想

将待排序的序列构成一个大顶堆,然后拿出堆顶,将剩余的数列构成一个大顶堆。以此类推,最终得到一个有序数列

算法实现

  • PHP实现
<?php

function hsort(&$arr, $len) {
	$idx = $len - 1;
	for ($i = 0; $i < floor($len / 2); $i ++) {
		buildHeap($arr, $i; $idx);
	}

	while($idx > 0) {
		list($arr[0], $arr[$idx]) = [$arr[$idx], $arr[0]];
		$idx --;
		buildHeap($arr, 0, $idx);
	}
}

function buildHeap(&$arr, $low, $high) {
	while($low * 2 + 1 <= $high) {
		$j = $low * 2 + 1;

		if ($j < $high && $arr[$j] < $arr[$j + 1]) {
			$j ++;
		}

		if ($arr[$low] > $arr[$j]) {
			break;
		}
		list($arr[$low], $arr[$j]) = [$arr[$j], $arr[$low]];

		$low = $j;
	}
}
$arr = [13,1, 7,11, 5, 3, 9, 8];
$res = mergeSort($arr);
print_r($res);

欢迎大家来到IT世界,在知识的湖畔探索吧!

  • Java实现
欢迎大家来到IT世界,在知识的湖畔探索吧!public static void main(String[] args)
    {
        int [] arr = {13,1, 7,11, 5, 3, 9};
        hsort(arr, arr.length);
        System.out.println(Arrays.toString(arr));
    }
public static void hsort(int[] array, int len)
    {
        int idx = len - 1;

        for (int i = 0; i < len / 2; i ++) {
            buildHeap(array, i, idx);
        }
        while (idx > 0) {
            int tmp = array[0];
            array[0] = array[idx];
            array[idx] = tmp;
            idx --;
            buildHeap(array, 0, idx);
        }
    }
public static void buildHeap(int[] array, int low, int high)
    {
        while (low * 2 + 1 <= high) {
            int j = low * 2 + 1;
            if (j < high && array[j] < array[j + 1]) {
                j ++;
            }
            if (array[j] < array[low]) {
                break;
            }
            int tmp = array[low];
            array[low] = array[j];
            array[j] = tmp;
            low = j;
        }
    }
  • Python实现
def buildHeap(lists, low, high):
    while low * 2 + 1 <= high:
        j = low * 2 + 1
        if j < high and lists[j] < lists[j + 1]:
            j += 1
        if lists[j] < lists[low]:
            break
        lists[low], lists[j] = lists[j], lists[low]
        low = j


def hsort(lists, length):
    idx = length - 1
    for x in range(math.floor(length / 2)):
        buildHeap(lists, x, idx)
    while idx > 0:
        lists[0], lists[idx] = lists[idx], lists[0]
        idx -= 1
        buildHeap(lists, 0, idx)


if __name__ == '__main__':
    # app.run(debug=True)
    arr = [13, 1, 7, 11, 5, 3, 9]
    hsort(arr, len(arr))
    for i in range(len(arr)):
        print("%d" % arr[i])

  • Go实现
欢迎大家来到IT世界,在知识的湖畔探索吧!func main() {
	arr := []int{13, 1, 7, 11, 5, 3, 9}
	hsort(arr, len(arr))
	fmt.Println(arr)
}

func hsort(arr []int, len int) {
	idx := len - 1
	for i := 0; i < len/2; i++ {
		buildHeap(arr, i, idx)
	}
	for idx > 0 {
		arr[0], arr[idx] = arr[idx], arr[0]
		idx--
		buildHeap(arr, 0, idx)
	}
}

func buildHeap(arr []int, low, high int) {
	for low*2+1 <= high {
		j := low*2 + 1
		if j < high && arr[j] < arr[j+1] {
			j++
		}
		if arr[j] < arr[low] {
			break
		}
		arr[j], arr[low] = arr[low], arr[j]
		low = j
	}
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/33206.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信