91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

堆排序

發布時間:2020-04-21 15:49:08 來源:網絡 閱讀:308 作者:閆寶通 欄目:編程語言
#include<stdio.h>
void Show(int  arr[], int n)
{
    int i;
    for ( i=0; i<n; i++ )
        printf("%d  ", arr[i]);
    printf("\n");
}
 
// 交換數組元素位置
void Swap( int *num_a, int *num_b )
{
    int temp = *num_b;
    *num_b = *num_a;
    *num_a = temp;
}
 //  創建大根堆算法
void HeapAdjust(int a[], int start, int end)
{
    int i,temp;
	temp = a[start];
    for (i = 2*start+1;i<end;i=i*2+1)
    {
        if (i+1<end&&a[i]<a[i+1])//右孩子大于左孩子,下標在右孩子上,否則下標在左孩子上
			i++;//i代表左右孩子中較大值得下標
        if(temp>a[i])//根比左右都大,跳出循環
			break;
        else{
			a[start] = a[i];//把孩子子樹中最大的值放在父節點
			start = i;
		}
    }
    a[start] = temp;
}
int* HeapBuild(int array[], int length)
{
	int i;
    for ( i = length / 2 - 1; i >= 0; i--)
    {
        HeapAdjust(array, i, length);
    }
    return array;
}
// 堆排序算法
int* HeapSort(int a[],int length){
	int i;
	a = HeapBuild(a,length);
	for(i = length-1;i>0;i--){
		Swap(&a[0],&a[i]);
		HeapAdjust(a,0,i);
	}
	return a;
}
int main()
{   //測試數據
	int *a;
    int arr_test[10] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 };
	Show(arr_test,10);
	a = HeapSort(arr_test,10);
	Show(a,10);
    return 0;
}

優化:
#include <stdio.h>
#include <stdlib.h>
int * DuiPaixu(int a[],int n){
  int end = n,i,t,x,y;
  while(end >= 1){
      while(1){
           int flag = 0;
           i=end/2;
           while(i > 0){
               if(a[i] < a[2*i]){
                 t = a[i];
                 a[i] = a[2*i];
                 a[2*i] = t;
                 flag = 1;
               }
               if(2*i+1 <= end&&a[i] < a[2*i+1]){
                 x = a[i];
                 a[i] = a[2*i+1];
                 a[2*i+1] = x;
                 flag = 1;
               }
               i--;
           }
           if(!flag)
               break;
      }        
      y = a[1];
      a[1] = a[end];
      a[end] = y;
      end--;    
  }
  return a;
}
void Print(int a[],int n){
    int i;
    for(i=1;i<=n;i++){
        printf("%5d",a[i]);
    }
}
int main(void){
    int n,i;
    int * a;
    printf("請輸入數組長度n=  ");
    scanf("%d",&n);
    a=(int*)malloc(n*sizeof(int));
    printf("請輸入數組元素: ");
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
    } 
    a = DuiPaixu(a,n);
    Print(a,n);
    return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古浪县| 崇义县| 荣昌县| 外汇| 阳西县| 靖宇县| 尼木县| 明光市| 苏州市| 浦县| 江川县| 甘孜县| 汝南县| 北流市| 达州市| 霞浦县| 娄烦县| 霍城县| 临高县| 托克逊县| 文昌市| 通河县| 锡林浩特市| 尼玛县| 惠东县| 临潭县| 渝北区| 馆陶县| 于都县| 兴义市| 井研县| 阿瓦提县| 聊城市| 安丘市| 旅游| 德格县| 察哈| 洛扎县| 德令哈市| 拉萨市| 义马市|