zoukankan      html  css  js  c++  java
  • c堆排序

    #include<stdio.h>
    #include<stdlib.h>
    /* p是循环输出的下表*/
    int p=0;
    /*堆调整算法*/
    /* r[]数组 , 根结点的编号为k,最后一个结点的编号为m  */
    void Sift(int r[ ], int k, int m)        
    {
           int i, j, temp;
           p++;i = k; j =2 * i;                  /* p是循环输出的下表   i是被筛选结点,j是结点i的左孩子*/
           while (j <= m)                 /*筛选还没有进行到叶子*/
                {
                if (j < m-1 && r[j] < r[j+1]) j++;  /*比较i的左右孩子,j指向较大者*/
              if (r[i] > r[j]) break;           /*根结点大于左右孩子中的较大者*/
                   else {
                             temp = r[i]; r[i] = r[j]; r[j] = temp;     /*将根结点与结点j交换*/
                                        i = j; j = 2 * i;              /*被筛结点位于原来结点j的位置*/
              }
                  }
             /*输出每一次 调整的代码*/
            printf("NO.%d line:	", p);
            for(i = 1; i< 7 ;i++)
        {
        printf("%3d",r[i]);
                    }
            printf("
    ----------------------------------
    ");
    }
    /*堆排序算法*/
    void HeapSort(int r[ ], int n)     /* r[0]为交换的临时单元*/
    {
            int i;
            /*初始建堆,从最后一个分支结点至根结点*/
            for (i = n/2; i >= 1; i--)      
            Sift(r, i, n) ;     
            for (i = 1; i < n; i++)         
            {
                 r[0] = r[1]; r[1] = r[n-i+1]; r[n-i+1] = r[0];   /*交换r[1]和r[n-i+1]*/
                 Sift(r, 1, n-i);                          /*对r[1]~r[n-i]重建堆*/
             }
    }
    /*主函数*/
    int main()
    {
        int i=0;
        int r[]={0,55,90,17,87,30,66}; 
        /* 排序前的数 */
        printf("Heap  sort before:");
        for(i = 1; i< 7; i++)
        printf("%3d", r[i]);
        /* 输出排序后的数 */
        printf("
     heap sort after:
    ");
        HeapSort(r, 6);
        
        system("color 4E");
        system("pause");
        return 0;
    }

    c插入排序

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void InsertSort(int r[ ], int n)          /*r[0]用作暂存单元和监视哨*/
     5 {    
     6   int i, j;
     7 for (i = 2; i <= n; i++)
     8 { 
     9 r[0] = r[i];                     /*暂存待插记录,设置哨兵*/
    10 for (j = i - 1; r[0] < r[j]; j--)       /*寻找插入位置*/
    11 r[j + 1] = r[j];                
    12     r[j + 1] = r[0];    
    13 }
    14 }
    15 int main()
    16 {
    17     int i;
    18     int r[]={0,12,15,9,20,6,31,24}; 
    19     printf("排序之前的元素是");
    20     for(i = 1; i< 8; i++)
    21     printf("%3d", r[i]);
    22     printf("
    排序后的元素是:");
    23     InsertSort(r, 7);
    24     for(i = 1; i< 8 ;i++)
    25     printf("%3d", r[i]);
    26     return 0;
    27 }
  • 相关阅读:
    openwrt解压zstd包时报错"openwrt/dl/zstd-1.4.5.tar.zst: Permission denied tar: This does not look like a tar archive tar: Exiting with failure status due to previous errors"如何处理?
    pip如何使用代理?
    Markdown: 对Typora的一些小调整
    ray
    关于nginx中proxy_set_header的设置
    解决 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    mysql 查询慢问题分析
    Elasticsearch导出数据存入本地文件
    mysql count 几种写法时间的比较
    python 线程池的实现
  • 原文地址:https://www.cnblogs.com/zhenqk/p/10614353.html
Copyright © 2011-2022 走看看