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

    千次阅读 多人点赞 2019-03-13 10:26:29
    直接插入排序(稳定算法)的基本思想:从第一个数开始,认定数组的前i个数有序,依次遍历数组,把后面的数据插入到合适的位置,使数组继续保持有序。 #include <stdio.h> void Swap(int* a, int* b...

    直接插入排序(稳定算法)的基本思想:从第一个数开始,认定数组的前i个数有序,依次遍历数组,把后面的数据插入到合适的位置,使数组继续保持有序。

    #include <stdio.h>
    
    void Swap(int* a, int* b){
    	int temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    //直接插入排序 升序
    void InsertSort_Up(int* arr, int length){
    	 int i;
    	//假定第0个元素是有序表,从第1个元素开始往有序表中插入数据
    	for (i = 1; i < length; i++){
    		int temp = arr[i];
    		int j;
    		for (j = i - 1; j >= 0 && arr[j] > temp; j--){
    			arr[j + 1] = arr[j];//往前挪
    		}
    		arr[j + 1] = temp;
    	}
    	return;
    }
    
    //直接插入排序 降序
    void InsertSort_Down(int* arr, int length){
         int i;
    	//假定第0个元素是有序表,从第1个元素开始往有序表中插入数据
    	for (i = 1; i < length; i++){
    		int temp = arr[i];
    		int j;
    		for (j = i - 1; j >= 0 && arr[j] < temp; j--){
    			arr[j + 1] = arr[j];//往前挪
    		}
    		arr[j + 1] = temp;
    	}
    	return;
    }
    
    void PrintArr(int* arr, int length){
        int i;
    	for ( i = 0; i < length; i++){
    		printf("%d ", arr[i]);
    	}
    	printf("\n");
    	return;
    }
    
    int main( ){
        int a[] = {3, 5, 2, 1, 9, 0, 6, 4, 7, 8};
        int length = sizeof(a) / sizeof(a[0]);
        InsertSort_Up(a, length);
        PrintArr(a, length);
        InsertSort_Down(a, length);
        PrintArr(a, length);
        return 0;
    }
    

    时间复杂度:最佳情况O(n),最坏情况O(n^2),平均时间复杂度O(n^2)。

    空间复杂度:需要一个临时变量temp来存储即将插入的数据所以O(1)。

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

    2020-11-06 16:21:22
    /直接插入排序:对数组中未排好序的序列向排好序的序列进行插入,从排好序的序列最后一位向前找,直到找到比他小的元素插入到它后面 用一个暂时变量代表目标元素,每一个比它大的都往后移动一位 传入数组a[ ],大小 n...

    /直接插入排序:对数组中未排好序的序列向排好序的序列进行插入,从排好序的序列最后一位向前找,直到找到比他小的元素插入到它后面
    用一个暂时变量代表目标元素,每一个比它大的都往后移动一位
    传入数组a[ ],大小 n
    /

    #include <stdio.h>
    
    void insert_sort(int a[],int n)
    {
    	int i,j,temp;
    	for(i=1;i<n;++i)
    	{
    		temp=a[i];
    		for(j=i-1;j>=0;--j)
    		{
    			if(temp<a[j])
    			{
    				a[j+1]=a[j];
    			}
    			else break;
    		}
    		a[j+1]=temp;
    	}
    } 
    
    int main()
    {
    	int a[]={1,34,12,9,6,2,16,5,8,3};
    	int i,n=10;
    	insert_sort(a,n);
    	for(i=0;i<n;++i) printf("%d  ",a[i]);
    
    	return 0;
    }
    
    展开全文
  • C语言 直接插入排序

    2019-12-12 19:42:23
    直接插入排序 原理如图: 代码 #include <stdio.h> #include <stdlib.h> void sort(int arr[],int len) { int i,j,k; for(i=1;i<len;i++)//外层循环指向需要进行排序的数 { for(j=i;j>0;j--)...

    直接插入排序

    原理如图:
    在这里插入图片描述

    代码

    #include <stdio.h>
    #include <stdlib.h>
    void sort(int arr[],int len)
    {
        int i,j,k;
        for(i=1;i<len;i++)//外层循环指向需要进行排序的数
        {
            for(j=i;j>0;j--)//内层循环进行排序
            {
                if(arr[j]<arr[j-1])
                    k=arr[j],arr[j]=arr[j-1],arr[j-1]=k;
                else break;//当插入的数大于等于前一个数时,插入完成,退出循环
            }
            
            printf("round %d:",i);
            for(k=0;k<len;k++)
            {
                printf("%d  ",arr[k]);
            }
            printf("\n");
            }
    }
    int main()
    {
        int i,arr[]={6,9,7,8,10,1,4,3,5,2},len;
        len=sizeof(arr)/sizeof(int);
        sort(arr,len);
        for(i=0;i<len;i++)
        {
            printf("%d  ",arr[i]);
        }
        return 0;
    }
    
    

    效果

    在这里插入图片描述
    红色 ( _ ) 表示完成排序的数组

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

    2020-06-04 09:17:37
    printf("请输入排序数据的个数:\t"); scanf("%d",&n); for(i=1;i;i++) { printf("请输入排序数据%d:\t",i); scanf("%d",&r[i].key); } insertzj(r,n); printf("排序之后:\n"); for(i=1;i;i++) { ...
    #include"stdio.h"
    #define typeone int
    #define maxsize 100
    
    typedef struct 
    {
    	typeone key;
    }link;
    
    void insertzj (link *r,int n)
    {
    	int i,j;
    	for(i=2;i<=n;i++)
    	{
    		r[0]=r[i];//r[0]原本不放入任何东西,作为一个放数值的灵活的踏板
    		j=i-1;
    		while(r[0].key<r[j].key)
    		{
    			r[j+1]=r[j];
    			j--;
    		}
    		r[j+1]=r[0];//当r[0].key比r[j].key大的时候
    	}
    }
    
    main()
    {
    	link r[maxsize];
    	int i,n;
    	printf("请输入排序数据的个数:\t");
    	scanf("%d",&n);
    
    	for(i=1;i<=n;i++)
    	{
    		printf("请输入排序数据%d:\t",i);
    		scanf("%d",&r[i].key);
    	}
    	insertzj(r,n);
    
    	printf("排序之后:\n");
    	for(i=1;i<=n;i++)
    	{
    		printf("%d\t",r[i].key);
    	}
    	printf("\n");
    }
    

    运行结果如下
    运行之后

    展开全文
  • 直接插入排序是是一种稳定的排序,其算法简便,适用于顺序结构和链式结构,更适合于基本有序(正序)的情况。其空间复杂度为O(1),时间复杂度为O(n2)。下面是实现算法: 先是预定义和类型定义: typedef int ...
  • C语言 直接插入排序(附源代码)

    千次阅读 2019-05-06 23:21:51
    插入排序思想:默认初始数组下标为0的数字为有序序列,每次从后续数组中顺序拿一个数字,将这个数字放到前面的有序序列中,放的位置要确保放完之后依旧是有序的。 举例说明 初始乱序数组 int a[10]={6,2,4,7,5,8,9...
  • [C语言] 插入排序之直接插入排序的特性及实现 1、算法特性  直接插入是一种简单、稳定的插入排序方法,属于最为基础的排序方法之一。  其时间复杂度最好情况为O(n)、最差与平均情况为O(n²),空间复杂度...
  • 直接插入排序 文章目录直接插入排序一、动态数组实现即输即排1.定义动态数组2.初始化动态数组3.增加动态数组长度4.排序算法5.实时输入数值并排序二、不带哨兵的数组直接插入排序三、带哨兵的数组直接插入排序项目...
  • 主要介绍了C语言直接插入排序与直接选择排序实现,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,需要的朋友可以参考下
  • C语言插入排序

    2021-04-02 19:52:24
    直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。 算法代码: //插入...
  • C语言 | 直接插入排序

    千次阅读 2021-03-08 14:30:23
    例99:C语言实现直接插入排序 。 解题思路:直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。 C语言源代码演示: #include<stdio.h...
  • C语言实现插入排序

    千次阅读 2019-01-24 14:26:04
    一、代码 //使用插入排序对数据进行排序;...void InserSort(int a[]) //直接插入排序; { for(int i=1;i&lt;N;i++) { int t=a[i]; //取出一个没有排序的数据; for(int j=i-1;j&gt;=0&a...
  • 直接插入排序(1)直接插入排序的基本思想直接插入排序(Straight Insertion Sort)算法是一种常用且简单直观的方法。它的基本思想是:设有n个数据的待排序序列,假设前面1到i-1个数据已经有序,是长度为i-1的有序序列,...
  • #include&amp;lt;stdio.h&amp;gt; int main() { int i,j,n,temp; scanf(&quot;%d&quot;,&amp;amp;n); int arr[n]; for(i=0;i&amp;lt;n;i++) { scanf(&... }

空空如也

空空如也

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

c语言直接插入排序

c语言 订阅