堆排序

来源:互联网 发布:java异常日志记录 编辑:程序博客网 时间:2024/06/05 19:07
#include<iostream>using namespace std;//升序建立最大堆;降序建立最小堆void heapadjust(int arr[], int start, int end) {    int tmp = arr[start];    //根结点从0开始,所以i结点的左右孩子结点的下标为2i+12i+2    for (int i = 2 * start + 1; i <= end; i = 2 * i) {        if (i < end&&arr[i] < arr[i + 1]) i++;        if (arr[start] > arr[i]) break;        else {            arr[start] = arr[i];            start = i;        }    }    arr[start] = tmp;}/*void heapadjust(int arr[], int pos, int len) {    int tmp,child;    //根结点从0开始,所以i结点的左右孩子结点的下标为2i+12i+2    for (temp=arr[pos];2*pos+1<=len;pos=child) {        child=2*pos+1;        if (child < end&&arr[child] < arr[child + 1]){            child++;        }        if (arr[pos] < arr[child]) arr[pos] = arr[child];        else   break;    }    arr[pos] = tmp;}*/void heapsort(int arr[], int len) {    for (int i = len / 2-1; i >= 0; i--) {        heapadjust(arr, i, len-1);    }    for (int i = len - 1; i >= 0; i--) {        int tmp = arr[i];        arr[i] = arr[0];        arr[0] = tmp;        heapadjust(arr, 0, i - 1);    }}int main() {    int arr[] = { 5,4,9,8,7,6,0,1,3,2 };    int len = sizeof(arr) / sizeof(arr[0]);    heapsort(arr, len);    for (int i = 0; i < len; i++) {        cout << arr[i] << ' ';    }    cout << endl;    system("pause");    return 0;}
原创粉丝点击