堆排序--还有递归法没有写

#include <iostream>
using namespace std;
void HeapAdjust(int arr[],int s,int m)//大顶堆,m表示最后一个数字位置,s表示第一个位置,都是下标
{
    int cur=s;
    int index;
    int tmp=arr[cur];
    while(cur*2+1<=m)
    {
        index=cur*2+1;//left child
        if(index<m&&arr[index]<arr[index+1])
        {
            index++;//right child
        }
        if(arr[cur]<arr[index])
        {
            arr[cur]=arr[index];
            arr[index]=tmp;
            cur=index;
        }
        else
        {
            break;
        }
    }
}
void HeapSort(int arr[],int size)//表示数组中元素的个数
{
    int arrSize=size;//(arrSize-1-1)/2表示最后一个父节点
    for(int i=(arrSize-1-1)/2;i>=0;i--)
    {
        HeapAdjust(arr,i,arrSize-1);
    }
    swap(arr[0],arr[size-1]);
    for(int i=arrSize-1-1;i>0;i--)
    {
        HeapAdjust(arr,0,i);
        swap(arr[0],arr[i]);
    }
}
int main()
{
    int arr[]={3,6,4,8,1,4,3,5,23,4324,5435,6546,76573,453,546,765,8768,987,654};
    HeapSort(arr,19);
    for(int i=0;i<19;i++)
        cout<<arr[i]<<" ";
    getchar();
    return 0;
}
时间: 2024-12-30 00:10:35

堆排序--还有递归法没有写的相关文章

算法笔记_013:汉诺塔问题(Java递归法和非递归法)

目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus is possible for using animation. e.g. if n = 2 ; A→B ; A→C ; B→C; if n = 3; A→C ; A→B ; C→B ; A→C ; B→A ; B→C ; A→C; 翻译:模拟汉诺塔问题的移动规则:获得奖励的移动方法还是有可能的.

LA3882 约瑟夫数学递归法

首先,约瑟夫环的数学优化方法为: 为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 我们知道第一个人(编号一定是(m-1)%n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):    k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2 并且从k开始报0.现在我们把他们的编号做一下转换: k --> 0 k+1 --

C语言之函数调用11—递归法求Hermite函数

/*递归法! ========================================== 题目: Hermite 函数:输入n.x,求Hn(x)? H0(x)=1; H1(x)=2*x; Hn(x)=2*x*Hn-1(x)-2*(n-1)Hn-2(x); ========================================== */ #include<stdio.h> float H(int n,int x) { if(n==0) return 1; if(n==1) r

C语言之函数调用12—递归法求阿克曼函数

//递归法! /* =========================================== 题目:编写阿克曼函数的递归函数程序! A(m,n)= n+1                (m=0) A(m-1,1)       (m=0) A(m-1,A(m,n-1))            (m!=0,n!=0) =========================================== */ #include<stdio.h> int A(int m,int n)

谭浩强 c程序设计 8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串&quot;486&quot;。n的位数不确定,可以是任意位数的整数。

8.17用递归法将一个整数n转换成字符串.例如,输入486,应输出字符串"486".n的位数不确定,可以是任意位数的整数. #include <stdio.h> char str1[20];int i=0;long n;int main(){        int longToStr(long n);    char *revstr(char *str, int len);    printf("请输入一个整数n:\n");    scanf("

2.简单求和[递归法]

计算1+2+3+4+5,用递归法的两种形式,练习这题主要查看递归规律,训练递归,形成递归的[本能].第一种,从后往前加. int sum(int a[],int n) { return n==0?0:sum(a,n-1)+a[n-1]; } 第二种,从两边对加,例:(1+5)+(2+4)+3,这个需要判定,假如数组的个数为偶,则左边+1==右边,如果为奇数,则左边+2==右边,需要将这三个数之和返回: int sum(int a[],int l,int r) { if(l+2==r)/*中间隔一

C语言之函数调用13—递归法求N阶勒让德多项式的值

//递归法! /* ======================================================= n阶勒让德多项式,n=1时,Pn(x)=x;n>=1时, Pn(x)=((2n-1)x-Pn-1(x)-(n-1)Pn-2(x))/2. ======================================================= */ #include <stdio.h> #include <math.h> double p(

C语言之函数调用14—递归法打印勒让德多项式前N项

//递归法 /* ================================================================== 题目:勒让德多项式 ================================================================== */ #include <stdio.h> double p(int n,double x) { if(n==0)return 1.0; else if(n==1)return x; else

C语言之函数调用16—递归法之一般函数的调用

//递归法 /* ================================================================== 题目:F(x,1)=1 F(x,n)=F(2x+1,n-1)*x  (n>1) ================================================================== */ #include<stdio.h> double F(float x,int n) { if(n==1) return