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

    2015-08-23 23:40:06
    C语言插入排序 C语言向有序数组中插入一个数使该数组仍保持有序 #include /*向有序的数组中插入一个数使该数组仍有序*/ #define N 5 void sort(int a[],int num) { int i,j,t1,t2; int end=a[N-2]; if(num>=end...

    C语言插入排序

    C语言向有序数组中插入一个数使该数组仍保持有序

    #include<stdio.h> /*向有序的数组中插入一个数使该数组仍有序*/
    #define N 5
    
    void sort(int a[],int num)
    {
    	int i,j,t1,t2;
    	int end=a[N-2];
    	if(num>=end)
    		a[N-1]=num;
    	else
    	{
    		for(i=0;i<N-1;i++)
    		   if(a[i]>num)
    			{
    				t1=a[i]; //先保存当前位置的值
    				a[i]=num; //插入数值
    				for(j=i+1;j<N;j++)
    				 { //以下三行将插入位置之后的数依次向后移动
    					t2=a[j];
    					a[j]=t1;
    					t1=t2;
    			     }
    			break; //找到合适的位置后就终止外层循环
    			}
    	}
    }
    
    int main()
    {
    	int a[N]={5,10,20,50};
    	int i=0;
    	int num;
    
    	printf("原数组:");
    	for(i=0;a[i]!='\0';i++)
    	printf("%d\t",a[i]);
    
    	printf("\n输入要插入的数:");
    	scanf("%d",&num);
    
    	sort(a,num);
    	printf("新的数组:");
    	for(i=0;i<N;i++)
    	printf("%d\t",a[i]);
    	printf("\n");
    	return 0;
    }

    运行结果:


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

    2018-05-24 18:09:23
    插入排序简介 实现过程 第一种 第二种 代码实现 个人分析 代码精简 插入排序简介 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法...

    插入排序简介

    插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。

    插入排序的模拟过程可以看链接:InsertSortion

    实现过程

    为了比较容易地理解插入排序,我们可以列出一组数据,比如:
    1,5,4,3,7

    我列出了两种方法分别说明插入排序的实现过程,你可以选择自己喜欢的方法:

    第一种

    对于插入排序算法来说:
    1. 取出一个数:
    1
    2. 取出第二个数 5,与 1比较,比 1小,插入第二位:
    1, 5
    3. 取出第三个数 4,依次与 1,5比较,所以4插入到第二位中,而 5向后推:
    1, 4, 5
    4. 取出第四个数 3,依次与 1, 4,5比较,所以3插入到第二位中,而 4, 5向后推:
    1, 3, 4, 5
    5 重复以上逻辑:
    1, 3, 4, 5, 7

    第二种

    这里写图片描述

    分析以上过程,我们发现排序算法可以分成两个步骤:
    1. 遍历数据表,每次取出一个数据,与之前的数据比较。
    2. 如果比之前的数据小,插入后将数据都向后推。

    代码实现

    下面是插入排序的实现,之后是对代码实现的简略说明:

    #include <stdio.h>
    
    void print(const int *a, const int length) {
        int i;
        for (i = 0; i<length; i++) {
            printf("%d ", a[i]);
        }
        putchar('\n');
    }
    
    void pushFront(int *a, const int length, const int key) {
        //将所有a[j]到a[length]都往后推一格
        int tmp = a[length];
        for (int i = length; i >key; i--) {
            a[i] = a[i-1];
        }
    
        a[key] = tmp;
    };
    
    void insertSort(int *a, const int length) {
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < i; j++) {
                if (a[i] < a[j]) {
                    pushFront(a, i, j);
                    break;
                }
            }
            print(a, i+1);
        }
    }
    
    void main() {
        const int length = 5;
        int my_array[5] = { 1,5,4,3,7 };
        print(my_array, length);
        insertSort(my_array, length);
    }
    个人分析
    1. 首先每次都取出一个数,然后与之前的排序好的数据进行比较,所以我们这里需要用到两个循环:
        for (int i = 0; i < length; i++) {
            //取出a[i]
            for (int j = 0; j < i; j++) {
                if (a[i] < a[j]) {
                    //当取出的数据小于排序好的数据后,需要将数据插入
                    //并且将之后的数据都往后推
                    //需要注意的是,i是现在数据的长度,而j则是插入的位置
                    pushFront(a, i, j);
                    break;
                }
            }
            print(a, i+1);
        }
    1. 实现插入代码
    void pushFront(int *a, const int length, const int key) {
        //将所有a[j]到a[length]都往后推一格
        int tmp = a[length];
        //这里,我使用了从后向前逐渐替换的方法。
        //在实现这里之前,我尝试了向将插入后的数据放入tmp中,然后依次向后替换,实现方法比较复杂。
        for (int i = length; i >key; i--) {
            a[i] = a[i-1];
        }
    
        a[key] = tmp;
    }

    代码精简

    void InsertSort(int *a, const int length){
        for(int i=1; i<length; i++){
            int tmp = a[i];
            int j = i-1;
            while(j>=0 && a[j] > tmp){
                a[j+1] = a[j];
                j--;
            }
            a[j+1] = tmp;
        }
    }
    展开全文
  • c语言 插入排序

    2020-06-07 10:33:21
    //这个表是边插入排序,失败的时候加了红色 #include"stdio.h" #include"stdlib.h"//颜色 #define maxsize 100 typedef struct { int datas[maxsize]; int last; }QWE; //////////////////////////////////////...

    //在顺序表中插入一个数,插完仍有序
    //这个表是边插入边排序,失败的时候加了红色

    
    #include"stdio.h"
    #include"stdlib.h"//颜色
    #define maxsize 100
    typedef struct
    {
    	int datas[maxsize];
    	int last;
    }QWE;
    ///
    void shuchu(QWE *a)
    {
    	int i;
    	printf("为\n");
    	for(i=1;i<=a->last;i++)
    		printf("%d\t",a->datas[i]);
    	printf("\n");
    }
    ///
    void yunxing(QWE *a,int n)
    {
    	int i;
    	for(i=a->last;n<a->datas[i];i--)
    	{
    		a->datas[i+1]=a->datas[i];
    	}
    	 a->datas[i+1]=n;
         a->last++;
    }
    /
    int shuru(QWE *a,int n)
    {
    	int i,x;
    	if(n>=1)
    	{
    	a->last=0; //顺序表初始化,使指针指在开头
    
    	for(i=1;i<=n;i++)
    		{
             printf("请输入第%d个数:",i);
    	     scanf("%d",&x);
    		 yunxing(a,x);
    		 shuchu(a);
    		}
    	return 1;
    	}
    	else
    		return 0;
    }
    
     int main()
    {
    	int n;
    	QWE a;
    	printf("请输入你想构造的顺序表的长度\n");
    	scanf("%d",&n);
      	printf("构造了一个长度为%d的顺序表\n",n);
    	if(shuru(&a,n)==1)
    	{
    		printf("此表的长度为:%d\n",n);
    		shuchu(&a);
    	}
    	else
    	{
    		printf("构造失败\n");
    	    system("color 4");
    	}
    	return 0;
    }
    
    

    创建成功:
    成功后

    创建失败:
    失败

    展开全文
  • c语言插入排序

    2016-11-11 10:04:00
    对于小规模输入,插入排序是一种非常快速的排序算法,且原理简单,结构紧凑。  插入排序的原理:从序列中第二个数A开始,将A,插入前面已经排好的序列中,形成一个新的排序好的序列,以此类推到最后一个元素。  ...

      对于小规模输入,插入排序是一种非常快速的排序算法,且原理简单,结构紧凑。

      插入排序的原理:从序列中第二个数A开始,将A,插入前面已经排好的序列中,形成一个新的排序好的序列,以此类推到最后一个元素。

      参考:http://jingyan.baidu.com/article/eae078278b3dd41fec5485bc.html

      

     1 void insert_sort(int a[],int l)
     2 {
     3     int i,temp,p;
     4     //从第2个元素开始
     5     for (i = 1; i<l ; i++){
     6         temp = a[i];//将带插入元素拿出来
     7         p = i-1;
     8         while (p>=0 && temp<a[p]){
     9             //比较大的元素向后挪一位,腾出空间
    10             a[p+1] = a[p];
    11             p--;
    12         }
    13 
    14         //插入
    15         a[p+1] = temp;
    16     }
    17 
    18 }
    19 
    20 int main()
    21 {
    22     int a[7] = {2,4,1,5,3,9,7},
    23         l = sizeof(a) / sizeof(int),
    24         i;
    25 
    26     insert_sort(a,l);
    27 
    28     for (i = 0; i < l; ++i) {
    29         printf("%d\n",a[i]);
    30     }
    31 
    32 }

     

    转载于:https://www.cnblogs.com/loveyouyou616/p/6053250.html

    展开全文
  • c语言 插入排序

    2018-06-01 16:00:21
    c语言基本插入排序c语言基本插入排序c语言基本插入排序c语言基本插入排序
  • C语言插入排序代码

    2014-08-17 20:01:46
    C语言插入排序代码
  • 插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。更多C/C++资料群文件:569268376直接插入排序插入排序...
  • ##C语言插入排序(解析) 运行结果:
  • 1. 工作原理     “插入排序”算法,它与生活中的“扑克牌”紧密相关。相信玩过扑克牌的读者应该非常清楚,每次我们仅考虑一个数据(张牌),并将其插入到已排好序的扑克适当位置中。在插入该数据(扑克牌)时候,先...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,795
精华内容 1,518
关键字:

c语言插入排序

c语言 订阅