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

    2021-04-01 11:49:49
    j–)//表示从该数前面的开始比较,如果遇到条件合适的,那么就插入进去,从头开始,开始按照你想要的顺序排序 // { // a[j + 1] = a[j];//将a[j]是我们找到那个唯一符合条件的值,将她赋值到需要跟他交换位置的那个...

    //#include<stdio.h>
    //#include<stdlib.h>
    //#define n 10
    //int main(void)
    //{
    // int a[10];
    // int i = 0, j = 0,t;
    // printf(“请输入十个数字\n”);
    // for (i = 0; i < 10; i++)
    // {
    // scanf_s("%d", &a[i]);
    // }
    // for (i = 1; i < n; i++)//表示循环n-1轮
    // {
    // t = a[i];//注意下面那一步是a[j] < t,而不是j<t
    //thi用来临时保存a[i]的值的变量
    // for (j = i - 1; j >= 0 && a[j] < t; j–)//表示从该数前面的开始比较,如果遇到条件合适的,那么就插入进去,从头开始,开始按照你想要的顺序排序
    // {
    // a[j + 1] = a[j];//将a[j]是我们找到那个唯一符合条件的值,将她赋值到需要跟他交换位置的那个元素中去
    // }
    // a[j+1] = t;//这一布和上面那步相当于找到位置后交换两个元素的值
    // //至于为什么要加1,因为前面的for循环已经减去1了
    // }
    // for (i = 0; i < 10; i++)
    // {
    // printf("%d\t", a [i]);
    // }
    // system(“pause”);//将黑色窗口停留,用户按任意键后退出
    // return 0;//程序正常运行后会返回一个0
    //}

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

    2011-12-03 16:26:38
    插入排序C语言实现 插入排序C语言实现 插入排序C语言实现
  • 插入排序C语言

    2018-06-16 19:43:58
    //下面这个题用指针实现直接插入排序 /* p=a; end=a+5; for(p=a+1;p;p++){ if(*(p-1)>*p){ temp=*p; *p=*(p-1); for(q=p-2;q>=a;q--){ if(*q){ break; } *(q+1)=*q; } *(q+1)=temp; }  }*/ for(int...

    #include<stdio.h>
    #include <stdlib.h>
    int main(){
    int a[5],j,temp,*p,*q,*end;
    for(int i=0;i<5;i++){
    scanf("%d",&a[i]);
    }
    for(int i=1;i<5;i++){
    if(a[i]>a[i-1])
    continue;
    temp=a[i];
    for(j=i-1;j>=0;j--){
    if(a[i]>a[j])
    break;
    a[j+1]=a[j];
    }
    a[j+1]=temp;
    }
    for(int i=0;i<5;i++){
    printf("%d",a[i]);
    }
    //下面这个题用指针实现直接插入排序
    /* p=a;
    end=a+5;
    for(p=a+1;p<end;p++){
    if(*(p-1)>*p){
    temp=*p;
    *p=*(p-1);
    for(q=p-2;q>=a;q--){
    if(*q<temp){
    break;
    }
    *(q+1)=*q;
    }
    *(q+1)=temp;

    }*/
    for(int i=0;i<5;i++){
    printf("%2d",a[i]);
    }
    return 0;

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

    2020-11-19 17:10:14
    折半插入排序 C语言 直接插入排序采用顺序查找法查找当前记录在已排好序的序列中的插入位置,这个“查找”操作可利用“折半查找”来实现,由此进行的插人排序称之为折半插入排序( Binary Insertion Sort )。 算法...

    折半插入排序 C语言

    直接插入排序采用顺序查找法查找当前记录在已排好序的序列中的插入位置,这个“查找”操作可利用“折半查找”来实现,由此进行的插人排序称之为折半插入排序( Binary Insertion Sort )。

    算法步骤:

    ①设待排序的记录存放在数组Data[1…n]中,Data[1]是一个有序序列。
    ② 循环n-1次,每次使用折半查找法,查找Data[ i ] ( i=2,…,n )在已排好序的序列DataI1…i-1]中的插入位置,然后将Data[ i ]插人表长为i-1的有序序列Data[1…n-1],直到将Data[ n ]插人表长为n-1的有序序列Data[ 1…n-1 ],最后得到一个表长为n的有序序列。

    在这里插入图片描述

    时间复杂度
    最好情况:O(nlog2log_2n)
    最坏情况:O(n2n^2)
    平均情况:O(n2n^2)

    空间复杂度
    O(1)

    稳定性
    稳定

    完整代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXSIZE 100  //顺序表最大容量,可以自行加大 
    
    typedef struct 
    {
    	int key;//关键字项 
    	char *otherinfo;//其他数据项 
    }ElemType;//记录类型 
    typedef struct
    {
    	ElemType Data[MAXSIZE+1];//静态顺序表的数据域,这里Data[0]为空闲或者为哨兵单元 
    	int length;//顺序表的长度 
    }SqList;//顺序表 
    
    void InitList(SqList &L)//顺序表的初始化 
    {
    	L.length = 0;//使顺序表长度归0,便是顺序表的初始化 
    }
    
    void CreateList(SqList &L)//顺序表的创建 
    {
    	printf("请输入:"); 
    	while(1)//建立一个死循环,循环终止条件是按了enter键 
    	{
    		L.length++;//顺序表长度加一 
    		if(L.length>MAXSIZE)//判断是否超出最大容纳量 
    		{
    			printf("顺序表已满!\n");
    			return ;
    		}
    		scanf("%d",&L.Data[L.length].key);//顺序表数据的输入 
    		if(getchar() == '\n')//循环终止条件 
    			break;
    	}
    }
    
    void InputList(SqList L)//顺序表的输出 
    {
    	int i;//记录次数 
    	if(L.length == 0)//判断顺序表是否为空 ,若为空结束该函数 
    	{
    		printf("顺序表是空的!\n");
    		return ;
    	}
    	printf("打印为:");
    	for(i=1;i<=L.length;i++)//利用循环打印顺序表中的数据 
    		printf("%d ",L.Data[i].key);	
    }
    
    void BInsertSort(SqList &L)//对顺序表L做折半插入排序 
    {
    	int i,j,//i和j为数据位置 
    		low,high,mid;//low、mid、high已排序的数列中最小、中间、最大的数据位置 
    	for(i=2;i<=L.length;i++)//利用循环逐个插入 
    	{
    		L.Data[0] = L.Data[i];//将待插入的记录在监视哨中  
    		low = 1;
    		high = i-1;//置查找区间初值 
    		while(low<=high)//在Data[low…high]中折半查找插入的位置 
    		{
    			mid = (low+high)/2;//折半 
    			if(L.Data[0].key < L.Data[mid].key)
    				high = mid-1;//插入点在前一子表 
    			else
    				low = mid+1;//插入点在后一子表 
    		}
    		for(j=i-1;j>=high+1;j--)
    			L.Data[j+1] = L.Data[j];//记录后移 
    		L.Data[j+1] = L.Data[0];//将Data[0]即Data[i],插入到正确位置 
    	}
    }
    
    int main()
    {
    	SqList L;
    	InitList(L);//初始化顺序表 
    	CreateList(L);//创建顺序表 
    	BInsertSort(L);//折半插入排序 
    	InputList(L);//打印排序后结果 
    	return 0;
    }
    
    

    在这里插入图片描述
    (完)

    展开全文
  • 一、什么是插入排序插入排序通俗来讲就是往一个已经排好序的序列中插入一个元素。在插入的过程中从序列尾部开始,一直往前比较,直到找到合适的位置才停止比较,最终将元素插入,可以从下图理解。二、for循环实现...

    一、什么是插入排序

    插入排序通俗来讲就是往一个已经排好序的序列中插入一个元素。在插入的过程中从序列尾部开始,一直往前比较,直到找到合适的位置才停止比较,最终将元素插入,可以从下图理解。

    4545dc29b28ffbdcbf7be6b935aca8db.png

    二、for循环实现插入排序

    // 最好时间复杂度O(n)// 最坏时间复杂度O(n^2)void insertSort(int A[], int len) {  for (int i = 1; i < len; i++)  {    int iNum = A[i];    int j = i ;    while (j - 1 >= 0 && A[j - 1] < iNum) // 从后往前比较的过程    {      A[j] = A[j - 1];      j--;    }    A[j] = iNum;  }}

    三、递归实现插入排序

    抓住前K-1个元素插入第K个元素即可

    //递归实现插入排序void insertSortRecurrent(int A[], int len) {  if (len > 1) // 当len为1时不用排序,只有一个数  {    insertSortRecurrent( A, len -1); //排好前 len - 1个数, 即A[0...(len - 2)] 已经有序          //往前插入第len个数    int cNum = A[len - 1];    int j = len - 1;    while (j - 1 >= 0 && A[j - 1] > cNum)    {      A[j] = A[j - 1];      j--;    }    A[j] = cNum;  }}
    展开全文
  • 插入排序思想:减治法。这个思想大致就是把一个大问题划分为许多同等规模的小问题,然后利用小问题解得到整个问题解。假设要对一个a[0……n]的数组进行排序,假设a[0……n-1]是有序的,只需要把第a[n]个插入到a[0...
  • 上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序...
  • 《算法导论》第二章,合并排序与插入排序C语言源码。
  • 直接插入排序C语言

    2020-03-14 23:25:11
    今天写一下直接插入排序:直接插入排序就是讲记录插入在已经排列好的有序表中,从而得到一个新的,递增为1的有序表. 先上代码: #include <stdio.h> void InsertSort(int * arr,int length) { int i,j; ...
  • #include<stdio.h> int main() { int temp = 0; int arr[10] = { 38, 9, 5, 12, 4, 98, 20, 76, -20, 0 }; for (size_t i = 1;...arr[j+1]) //如果当前的最大值情况改变,应继续向前判断大小关系,否则可以...
  • 插入排序c语言实现

    2020-08-03 18:48:12
    插入排序 算法思想: 细心的同学会发现,我们把打扑克牌过程放慢,从获得第一张牌开始接下来我们按照从大到下(小到大)进行排序,我们当前获得一张牌如何在已排好序的的牌中按大小占据合适位置。这就需要依次与...
  • 插入排序C语言

    2018-10-28 19:32:26
    插入排序是最简单的排序算法。正式表述为:插入排序每次从无序数据集中取出一个元素,扫描已排好序的数据集,并将它插入有序集合的合适位置上。虽然乍一看插入排序需要独立为有序和无序的元素预留足够的存储空间,但...
  • 插入排序 C语言实现

    2009-10-26 15:02:51
    经典的插入排序算法,C语言实现,数据结构必备
  • 插入排序 C语言编写

    2009-12-09 18:57:02
    利用C语言编写插入排序运算~~简单易懂~~全英文编写~~显示每次排序过程~~
  • 插入排序 1、直接插入排序 算法思想:直接插入排序是无序序列插入到有序序列中,通常假定a[0]为已经排好序的子序列,然后将剩下无序序列一个一个插入到有序的子序列中。适用于基本有序和数据量不大的情况。 例如对于...
  • 直接插入排序 是一种最简单的排序方法,其基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。 算法步骤: (1)设待排序的记录存放在数组Data[1…n]中,Data[1]是一个有序序列...
  • 然后把是后一个元素插入到这个有序的部分中 AC #include <stdio.h> #include <malloc.h> void InsertSort(int *&arr, int N) { if (N == 0) //跳出条件 return; InsertSort(arr, N - 1); //...
  • C语言实现插入排序的代码,应该会有帮助。
  • 插入排序算法 方法一 #include&lt;stdio.h&gt; void insertsort(int a[], int n){ int temp; for(int i = 1; i &lt; n; i++){ for(int j = 0; j &lt; i; j++){ //printf("%d\n", j);...

空空如也

空空如也

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

插入排序c语言

c语言 订阅