首页 > 代码库 > 堆排序
堆排序
#include<iostream> #include<algorithm> #include<numeric> using namespace std; //void MinHeapFixup(int a[], int i) //{ // int j ,temp; // temp = a[i]; // j = (i-1)/2; // while(j >= 0 && i != 0) // { // if(a[j] <= temp) break; // a[i] = a[j]; // i = j; // j = (i - 1)/2; // } // a[i] = temp; //} void MinHeapFixup(int a[],int i) { for(int j = (i -1)/2;(j>=0 && i != 0) && a[i] > a[j];i=j,j=(i-1)/2) swap(a[i],a[j]); } void MinHeapAddNumber(int a[], int n, int nNum) { a[n] = nNum; MinHeapFixup(a,n); } void MinHeapFixdown(int a[],int i,int n) { int j,temp; temp = a[i]; j = 2*i + 1; while(j<n) { if(j+1 < n && a[j + 1] < a[j]) j++; if(a[j] >= temp) break; a[i] = a[j]; i = j; j = 2*i + 1; } a[i] = temp; } void MinHeapDeleteNumber(int a[],int n) { swap(a[0],a[n-1]); MinHeapFixdown(a,0,n - 1); } void MakeMinHeap(int a[], int n) { for(int i = n/2 - 1;i>= 0;i--) MinHeapFixdown(a,i,n); } void Minheapsort(int a[],int n) { for(int i = n-1;i>=1;i--) { swap(a[i],a[0]); MinHeapFixdown(a,0,i); } } int main() { int a[] = {1,9,5,3,7,2,6,3,4}; Minheapsort(a,8); for(int i = 0;i< 8;i++) cout<<a[i]<<" "; }
奶奶个腿,把堆排序,快排序和归并排序他妈的背下来
不过的确,三种算法对应着三种思想
一个分治法,一份分治+双指针,最后一个找优先~
Magic
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。