我的堆排序在某處是錯誤的,請幫我修復它

發布 家居 2024-05-10
12個回答
  1. 匿名使用者2024-02-10

    維護堆時,不會初始化標誌,並且無法檢測到它是否進入 while 迴圈。

    只需在 while 之前為標誌分配乙個非 0 值,以確保它進入迴圈。

    另外,我不明白為什麼你用乙個非常小的堆來反序排列陣列,然後反序輸出,這純粹是多餘的。 只需使用非常大的一堆。

  2. 匿名使用者2024-02-09

    *heapsort*/

    #include

    #include

    #include

    int a[1000];

    int n;

    void heap(int d ,int m) 維護堆。

    int min,flag=1,temp;

    while(flag)

    flag=0;

    min=a[d];

    if(d*2<=m&&a[d*2]=1;i--)heap(i,n);初始堆從下到上按順序構建。

    int main()

    int i,temp;

    printf("please enter the number(<999) of the number is to be sorted.");

    scanf("%d",&n);

    printf("please enter each number.");

    for(i=1;i<=n;i++)scanf("%d",&a[i]);

    long tim=gettickcount();

    buildheap();

    for(i=n;i>=2;i--)

    temp=a[1];

    a[1]=a[i];

    a[i]=temp;

    heap(1,i-1);

    for(i=n;i>=1;i--)printf("%d",a[i]);

    printf("it takes %ld (ms).",gettickcount()-tim);

    system("pause");

  3. 匿名使用者2024-02-08

    使用左右樹的大小對堆進行排序是正確的。 這沒有錯。

  4. 匿名使用者2024-02-07

    我將發布我自己的模板,我的堆排序。

    #include

    #include

    void heapadjust(int array, int a, int nlength)

    void heapsort(int array, int nlength)

    int main()

  5. 匿名使用者2024-02-06

    堆排序 1,堆定義。

    堆是具有以下特徵的 n 個關鍵字的序列:

    ki<=k2i

    和 ki<=k2i+1 (1<=i<=n 2) (1)。

    或者 ki>=k2i

    和 ki>=k2i+1 (1<=i<=n 2) (2)。

    ki>=k2i

    滿足式(1)的稱為極簡堆,或非常小的堆,或小堆,滿足式(2)的稱為最大化堆,或非常大的堆。 在本節中,我們將使用乙個小型化堆作為示例。

    堆與完整二叉樹的關係:堆是n個元素(關鍵字)的序列,滿足完整二叉樹順序儲存中節點之間的關係(父項與子項序列號的關係)。

    17、28、51、33、62、96、87、51為小頂樁。

    96、51、87、33、28、62、51、17是大頂樁。

    二進位堆 2,堆排序的基本問題。

    由於頂部元素(關鍵字)是最小的元素,因此它是排序序列中最小的元素,輸出後,其他元素被調整成乙個堆,新的頂部元素是排序序列的第二個元素。 這樣,就可以使用堆將無序序列轉換為有序序列。 因此,堆排序的基本問題是:

    1)如何打樁。

    2)如何調整樁。

    3.如何調整樁。

    將最後乙個元素與堆的頂部元素交換(相當於輸出堆的頂部元素)後,從堆頂部到倒數第二個元素的所有元素都符合堆的定義。 下面是一種過濾方法,用於將所有元素(包括堆的頂部元素)放入堆中。 一大堆根。

    void sift(rectype r,int i,int m)

    for‖heapsort

    6、堆排序演算法分析。

    時間複雜度為 o(nlogn),交換只需要乙個記錄大小的輔助儲存空間。

  6. 匿名使用者2024-02-05

    就給大家乙個堆疊的**吧!

    小根樹 * 包括

    using namespace std;

    int a[10000];

    int n;

    void check(int i)}}

    void bheap()

    int main()

    system("pause");

    return 0;}

  7. 匿名使用者2024-02-04

    最小堆中的刪除數。

    void minheapdeletenumber(int a, int n)

    此函式的問題在於,您應該首先將已刪除的元素與最後乙個元素交換,進行比較,然後決定是向上還是向下調整。

  8. 匿名使用者2024-02-03

    你顯然錯了 堆排序首先必須有多個資料,陣列中應該有一組資料 int a 20,然後給陣列賦值,堆排序不是自己寫的......

  9. 匿名使用者2024-02-02

    minheapaddnumber();

    minheapsorttodescendarray();

    兩個函式傳遞的引數與表單引數不匹配。

  10. 匿名使用者2024-02-01

    堆排序相當於排序二叉樹,只不過根節點的優先順序大於任何子節點的優先順序,這樣每次都可以刪除根節點,然後可以調整整個堆。

    program heap;

    var a:array[1..10000] of integer;

    n,i:integer;

    procedure down(i:integer);

    var x,j:integer;

    beginx:=a[i];

    j:=i*2;

    while j<=n do

    beginif a[j]>a[j+1] then j:=j+1;

    if a[j]begin

    a[i]:=a[j];

    i:=j;j:=i*2;

    end else break;

    end;a[i]:=x;

    end;procedure delete(i);

    beginn:=n-1;

    if (n=0)or(i=n+1) then exitelse

    begina[i]:=a[n+1];

    down(i);

    end;end;

    beginreadln(n);

    for i:=1 to n do read(a[i]);

    for i:=n div 2 downto 1 do down(i);

    for i:=1 to n do

    beginwrite(a[1]);

    delete(1);

    end;end.

  11. 匿名使用者2024-01-31

    你可以想象,這個資料被用來形成乙個二叉樹,其中每個節點的左邊子節點都比他小,子節點比他大,這樣就建立了乙個排序樹。 最後,在遍歷一側的中間順序中,讀取乙個點以列印該點的資料。

    PS:樓上的那個師傅是誰? 程式似乎是對的?!

  12. 匿名使用者2024-01-30

    for (int i = heap[0] /2; i > 0; i++)

    heapmaxheapify(heap, i);

    這個迴圈是乙個無限迴圈。

相關回答
6個回答2024-05-10

不,這是乙個與任務相關的過程,我和你一樣餓,所以我有更多的經驗。

8個回答2024-05-10

不就是這個嗎:

對不起,寶貝 >>>More

22個回答2024-05-10

老兄:說實話,看完你的問題,我絕對不會和你愛人有問題 不是我吹風點火,讓任何人都遠離鬼魂 >>>More

5個回答2024-05-10

我來看看標題。

15個回答2024-05-10

首先,看看牛奶的來源。

地球上南北緯40-50°之間的溫帶草原溫度適宜,氣候宜人,雨量充沛,土壤肥沃,有100多種優質天然牧場,再加上對環境無汙染,這些要素共同決定了牧場和奶牛羊的生產環境,也成為鮮奶品質(蛋白質含量, 乳脂含量、乳幹物質或總乳固體含量、潔淨度等指標),因此該區域被稱為“**奶源帶”。 >>>More