zoukankan      html  css  js  c++  java
  • 堆排序(heapsort)

    堆排序(heapsort)

    Heap Sort

    1. Complete Binary Tree
    2. parent > children

    heapify

    n = i ---> parent = (i - 1) / 2

    ​ ----> c1 = 2i + 1

    ​ ----> c2 = 2i + 2

    #include <stdio.h>
    
    void swap(int arr[], int i, int j) {
    	int tmp = arr[i];
    	arr[i] = arr[j];
    	arr[j] = tmp;
    }
    
    void heapify(int tree[], int n, int i) {
    	if (i >= n) {
    		return ;
    	}
    	int c1 = 2 * i + 1;
    	int c2 = 2 * i + 2;
    	int max = i;
    	if (c1 < n && tree[c1] > tree[max]) {
    		max = c1;
    	}
    	if (c2 < n && tree[c2] > tree[max]) {
    		max = c2;
    	}
    	if (max != i) {
    		swap(tree, max, i);
    		heapify(tree, n, max);
    	}
    }
    
    void build_heap(int tree[], int n) {
    	int last_node = n - 1;
    	int parent = (last_node - 1) / 2;
    	int i;
    	for (i = parent; i >= 0; i--) {
    		heapify(tree, n, i);
    	}
    }
    
    void heap_sort(int tree[], int n) {
    	build_heap(tree, n);
    	int i;
    	for (i = n - 1; i >= 0; i--) {
    		swap(tree, i, 0);
    		heapify(tree, i, 0);
    	}
    }
    
    int main()
    {
    	int tree[] = {2, 5, 3, 1, 10, 4};
    	int n = 6;
    	heap_sort(tree, n);
    	int i;
    	for (i = 0; i < n; i++) {
    		printf("%d
    ",tree[i]);
    	}
    	return 0;
    }
    
    /* !< output */
    1
    2
    3
    4
    5
    10
    
    
    
    
  • 相关阅读:
    冲刺阶段第三天
    冲刺阶段第二天
    冲刺阶段第一天
    工作项估计
    学习进度条(7-9周)
    团队计划会议01
    第一次冲刺阶段(一)
    软件项目团队报告
    团队项目会议第一次
    团队开发项目需求简介
  • 原文地址:https://www.cnblogs.com/xzpin/p/11493892.html
Copyright © 2011-2022 走看看