1306. Sorting Algorithm

来源:互联网 发布:电视会被网络取代吗 编辑:程序博客网 时间:2024/06/07 06:37

null

题解:

水题一道,写个堆排序练练手。
今天上数据结构课,老师问了一个问题:实际应用中,快速排序为何比堆排序应用更加广泛?答案:堆排比较的几乎都不是相邻元素,对cache极不友好,这才是很少被采用的原因。

Code:

#include <iostream>#include <stdio.h>using namespace std;void swap_m(int & a,int & b){    int tmp = b;    b = a;    a = tmp;}void heap_sort(int i,int * s,int last){    int L = 2*i, R = 2*i+1;    if (L>last&&R>last) return ;    int Max_LR = -1;    if (R<=last&&L>last) Max_LR = R;    if (L<=last&&R>last) Max_LR = L;    if (R<=last&&L<=last) Max_LR = (s[L]<s[R])?R:L;    if (s[Max_LR]>s[i])        {            swap_m(s[Max_LR],s[i]);            heap_sort(Max_LR, s, last);        }}int main(){    int N,I;    while(scanf("%d%d",&N,&I)&&(N!=0||I!=0))    {        int * s = new int [N+1];        s[0] = N;        for (int i = 1;i<=N;i++) scanf("%d",&s[i]);        for (int i = N/2;i>=1;i--)            heap_sort(i,s,N);        for (int i = N;i>=1;i--)        {            swap_m(s[i], s[1]);            heap_sort(1, s, i-1);        }        //for(int i =1;i<=N;i++)          //  printf("%d ",s[i]);        for (int i = 1;i<=N;i+=I)            if (i==1) printf("%d",s[i]);                else printf(" %d",s[i]);        printf("\n");    }    //printf("\n");    return 0;}
原创粉丝点击