精华内容
下载资源
问答
  • C语言插入法排序

    2011-10-04 22:26:00
    C语言插入法排序C语言插入法排序C语言插入法排序C语言插入法排序
  • c语言 插入排序法

    2018-06-01 16:00:21
    c语言基本插入排序法c语言基本插入排序法c语言基本插入排序法c语言基本插入排序法
  • C语言 冒泡法排序,选择法排序插入排序

    千次阅读 多人点赞 2014-12-04 22:56:06
    实例1 冒泡法排序 数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序。 ...冒泡法排序C语言教材中已经介绍过的排序方法,与其他排序方法比较起来,冒泡法效率是最低的,但因其算法

    实例1 冒泡法排序

    数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序。

    实例解析:

    排序是非常重要且很常用的一种操作,有冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序等多种方法。这里我们先简单介绍前三种排序算法和代码的实现,其余算法将在后续课程《数据结构》中学习到。

    冒泡法排序是C语言教材中已经介绍过的排序方法,与其他排序方法比较起来,冒泡法效率是最低的,但因其算法简单,故也常被采用,其算法是:

    1从第一个数开始,相邻两个数两两比较,将大的(或小的)交换到后面,然后继续比较第23个数…..当比较完最后两个数的时候,最大数(或最小数)便排在最后了。此过程称为一趟

    (2)将最大数排除在外,其余数重复步骤1

    (3)重复步骤2,直到所有数都排好为止。

    对于有N个数的排序,上面的过程总共需要进行N-1趟。

    下面是冒泡法排序的代码:

    #include <stdio.h>

    #define  N 10

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, t;

     for(i = 0; i < N-1; i++){     //共进行N-1

       for(j = 0; j < N–i-1; j++)  /*已排好的数据不参与比较 */

         if(a[j] > a[j+1]){  

           t = a[j];

           a[j] = a[j+1];

           a[j+1] = t;

         }

     }

     for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i]);

     printf(“\n”);

     getch();

     return 0;

    }

    实例2 选择法排序

    数组中有N个整数,用选择法将它们从小到大排序。

    实例解析:

    选择法是被较多采用的一种排序方法,其效率比冒泡法高(交换数据的次数少),而算法却并未复杂多少。

    选择法排序总的思路是:

    1找出一个最小数,交换到最前面。

    2在剩下的数里面,再找一个最小的,交换到剩下数的最前面

    3、重复步骤,直到所有数都已排好。

    显然,对于含有N个数的数组来说,其过程也要进行N-1 ( 0 <= i < N-1 )

    上面所述步骤中,“找出一个最小数,交换到最前面”的方法是:

    先将剩下数中的第一个数(序号是i)作为擂主,用变量k记下其序号,后面的数依次与擂主(注意:擂主是a[k],不总是a[i])比较,若比擂主还小,则用k记下其序号(注意:此时不要交换),当所有数都与擂主比较后,k中存放的就是最小数的序号,然后将它交换到最前面(现在才交换)。在上面的过程中,数据只交换了一次,即每趟只交换一次数据。

    代码如下:

    #include <stdio.h>

    #define  N 10

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, k, t;

     for(i = 0; i < N-1; i++){          //共进行N-1

        /* 首先将最前面数当作擂主,记录其序号 */

    k = i;                    //当进行第i趟时,最前面数的序号是

        /* 后面的每一个数都与擂主进行比较,以便找出最小数 */

    for(j = i+1; j <= N-1; j++)   

          if(a[j] < a[k])          //擂主是a[k],未必总是a[i] 

            k = j;                  //若比擂主还小,则记录其序号

    /* 将最小数交换到(剩下数的)最前面 */

        t = a[k];

        a[k] = a[i];

        a[i] = t;     

     }

     for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i] );

     printf(“\n”);

     getch();

     return 0;

    }

    实例3 插入排序

    数组中有N个整数,用插入排序实现它们由小到大的排列。

    实例解析:

    插入排序也是常用的一种排序方法,效率较冒泡法高(一趟即可完成),但比选择法低(移动数据次数多)。其基本思想是:将数组分成两个区:前面是已排序的区域(有序区),后面是没有排序的区域(无序区)。每次都从无序区中取第一个数插入到有序区中适当位置,直到所有数据插入完毕为止。

    算法的具体描述是:

    待排序的数据存放在数组A[0, 1, ...N-1]中,未排序前,A[0]自己是一个有序区,A[1, 2, ...N-1]是无序区。程序必须从i = 1开始,直到i = N-1为止,每次将A[i]插入到有序区中。

    插入排序与打扑克摸牌时的理牌过程很相似,当摸来第一张牌时,不需要排序,本身就是排好的(就一张),从第二张开始,每次摸来一张牌,必须插入到原来有序的扑克牌中的适当位置,而为了找到这个适当位置,需要将新摸来的牌与手中的牌进行比较。

    基本的插入排序:

    首先在有序区A[0,1,...i-1]中查找A[i]应该插入的位置k0 <= k <= i-1),然后将A[k,k+1,...i-1]中的数据各自后移一个位置,腾出位置k插入A[i]

    若有序区所有数据均小于A[i]时,A[i]就应该在原位置不变,不需要插入。

    改进后的插入排序:

    将待插入的数据A[i]自右至左依次与有序区的数据A[i-1,i-2,...0]进行比较,若A[i]小于某数据A[j],则A[j]后移一个位置,继续与前面的数据比较......直到遇到比A[i]小的数据或前面已没有数据,则插入位置确定。

    若碰到一个数据A[j]A[i]小,则A[i]应插入到位置j+1

    A[i-1]A[i]小,则A[i]位置不变。

    若所有数据都比A[i]大,则A[i]应插入到位置0

    下面是改进后插入排序的代码:

    #define  N 10

    #include <stdio.h>

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, t;

     for(i = 1; i <= N-1; i++){

       t = a[i];                     //保存a[i],因a[i]会被覆盖

    for(j = i-1; a[j]>t && j>=0; j--) // a[j]>t不能写成a[j]> a[i]

         a[j+1] = a[j];

       a[j+1] = t;

    }

    for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i] );

     printf(“\n”);

     getch();

    return 0;

    }


    展开全文
  • C语言插入排序法

    2021-05-12 11:59:00
    C语言插入排序法 #include <stdio.h> void insertionSort(int *arr, int len) { int i, j, tmp; for (i = 1; i < len - 1; i++) { tmp = arr[i]; for (j = i - 1; j >= 0 && arr[j] >...

    C语言之插入排序法

    #include <stdio.h>
    void insertionSort(int *arr, int len)
    {
      int i, j, tmp;
    
      for (i = 1; i < len - 1; i++)
      {
        tmp = arr[i];
        for (j = i - 1; j >= 0 && arr[j] > tmp; j--)
        {
          arr[j + 1] = arr[j];
        }
        arr[j + 1] = tmp;
      }
    }
    
    void Print(int *arr, int len)
    {
      for (int i = 0; i < len; i++)
      {
        printf("%d ", arr[i]);
      }
      printf("\n");
    }
    
    int main()
    {
      //int arr[] = {96, 61, 18, 26, 55, 42, 4, 72, 83};
      int arr[] = {2, 5, 6, 4, 3, 7, 9, 8, 1, 0, 13};
      int len = sizeof(arr) / sizeof(int); //计算数组中的成员数
    
      Print(arr, len);
      insertionSort(arr, len);
      Print(arr, len);
    
      return 0;
    }
    
    展开全文
  • c语言插入排序法

    千次阅读 2018-03-19 13:57:29
    printf("从小到大排序\n"); for(i=0;i;i++){ iTemp=a[i]; iPos=i-1; while((iPos>=0)&&(iTemp[iPos])){ a[iPos+1]=a[iPos]; iPos--; } a[iPos+1]=iTemp; } printf("输出数组\n"); for(i=0;i;i++){ ...
    int main(){ 
        int i;
        int a[10];
        int iTemp;
        int iPos;
        printf("为数组元素赋值:\n");
        for(i=0;i<10;i++){
            printf("a[%d]=",i);
            scanf("%d",&a[i]);
            }
        printf("从小到大排序\n");
        for(i=0;i<10;i++){
            iTemp=a[i];
            iPos=i-1;
            while((iPos>=0)&&(iTemp<a[iPos])){
                a[iPos+1]=a[iPos];
                iPos--;
                }
            a[iPos+1]=iTemp;
            }
        printf("输出数组\n");
        for(i=0;i<10;i++){
            printf("%d\t",a[i]);
            if(i==4)
            printf("\n");
            }
        return 0; 
        }

     

    展开全文
  • C语言插入排序法

    2021-05-12 22:11:42
    C语言插入排序法二 C程序源码: #include <stdio.h> void print(int a[], int len) { printf("\t"); for (int j = 0; j < len; j++) { printf("%d ", a[j]); } printf("\n"); } void InsertSort...

    C语言之插入排序法二

    • C程序源码:
    #include <stdio.h>
    void print(int a[], int len)
    {
      printf("\t");
      for (int j = 0; j < len; j++)
      {
        printf("%d ", a[j]);
      }
      printf("\n");
    }
    
    void InsertSort(int a[], int n)
    {
      for (int i = 1; i < n; i++)
      {   //i=1的写法
        if (a[i] < a[i - 1])
        { //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
          int j = i - 1;
          int x = a[i];    //复制为哨兵,即存储待排序元素
          a[i] = a[i - 1]; //先后移一个元素
          while (x < a[j])
          { //查找在有序表的插入位置
            a[j + 1] = a[j];
            j--; //元素后移
          }
          a[j + 1] = x; //插入到正确位置
        }
      }
    }
    
    int main()
    {
      int a[] = {27, 36, 38, 44, 2, 3, 4, 5, 15, 19, 16, 46, 47, 48, 52};
      int len = sizeof(a) / sizeof(int); //计算数组中的成员数
      print(a, len);
      InsertSort(a, len);
      print(a, len);
      return 0;
    }
    
    展开全文
  • 这一个原创C语言编写的数组大小排序法,包括插入法和冒泡法.通过学习它的思想,把握这两种基本的算法,达到举一反三的效果。
  • C语言中关于插入法排序的源代码; C语言中关于插入法排序的源代码。
  • C语言插入排序

    千次阅读 2016-02-09 19:58:29
    插入法排序的要领就是每读入一个数立即插入到最终存放的数组中,每次插入都使得该数组有序。 上代码: #include #include #define n 10 int main() { int a[n]={-1,3,6,9,13,22,27,32,49}; /*注意留一个...
  • // 选择法排序 冒泡排序 直接插入排序 #include <stdio.h> int main(void) { int a[]={3,5,1,2,7,8,9}; int len=0; int i,j,k; int tmp=0; len=sizeof(a)/sizeof(a[0]);//求数组长度 for(i=0;i<len;i...
  • 4.插入法排序 #include<stdio.h> //头文件 int main(){//主函数 int i, n; int a[999]; int iTemp, iPos; //输入 printf("请输入需要排序的元素的个数:\n"); scanf("%d", &n); printf("请输入...
  • 经典C语言排序算法,其中包括三种典型号的排序算法,冒泡排序,选择排序,插入法排序,并有实例.
  • C语言冒泡法排序 第一种类型 #include<stdio.h> int main(){ int a[10]={4,5,2,8,9,3,1,0,11,32}; int i,j,t; printf(“the unsort numbers :\n”); for(i=0;i<10;i++) printf("%d “,a[i]); printf(”\n")...
  • C语言实现插入排序

    2018-10-21 00:48:03
    實作插入排序法讓一個序列的數字遞增,並輸出數字總共交換了幾次。 比如說一個序列1 3 7 9 2,前四個數字都已經排好了,這時候第五個數字2進來,他必須跟9,7,3交換使得序列變成1 2 3 7 9。這個數字2的交換次數就是3...
  • 1、选择法排序 选择法排序是指每次选择索要排序的数组中的最小值(这里是由小到大排序,如果是由大到小排序则需要选择最大值)的数组元素,将这些数组元素的值与前面没有进行排序的数组元素值进行互换 代码实现需要...
  • 插入法排序(c语言)

    2020-12-15 13:09:02
    插入法 核心:每读入一个数立刻插入最终存放的位置,每次插入都使改数组有序 代码如下: #include <stdio.h> #define n 10 int main() { int a[n],i,j,k,x; scanf("%d",&x);//读入第一个数,直接存到a[0...
  • C语言插入排序算法

    2016-07-28 16:22:00
    直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。选择排序对大小为N的无序数组R[N]...
  • 1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1个和第n个,此时...
  • [C语言] 插入排序之希尔(shell)排序的特性及实现 1、算法特性  希尔排序法又称缩小增量,由直接插入排序改进而来,是一种不稳定的插入排序方法。其本质上是一种分组排序方法,不需要大量的辅助空间,和归并...
  • C语言——插入排序法C语言中有很多排序的方法,这次我先介绍一下插入排序法
  • 计算机领域,排序和查找是两种最基本的操作任务,几乎在所有数据库程序、编程程序和操作系统中都有应用。排序是把一系列数据按升序或降序排列的过程,也就是将一个无序大的数据序列调整为有序序列的...交换法排序...
  • 文章目录算法描述关于插入排序法的稳定性问题 算法描述 插入排序总的思维来讲,就是每一趟将一个待排序的元素,按照其值的大小插入到有序序列的合适位置上,使有序序列长度增加1,直到所有元素全部插入完成。 我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 580
精华内容 232
关键字:

c语言插入法排序

c语言 订阅