当前位置:首页 » 编程语言 » c语言插入排序程序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言插入排序程序

发布时间: 2022-09-21 11:15:21

1. c语言的插入排序

第一个for循环i=2,执行的是这三个数20,46,33的排序,按程序执行下来:
{
temp=a[i]; //temp=33
j=i-1;
while(j>=0&&temp<a[j]) //因为j=1,所以最多循环两次,具体还得看temp<a[j]的条件
{a[j+1]=a[j]; //第一次使得a[2]=46,第二次循环条件不成立,跳出循环
j--;
}
a[j+1]=temp; //a[1]=33

这样就完成了前三个数的排序,下面i++后i=3执行前三个数排序,原理同上!

2. c语言插入排序问题

t=i;;
for(;i<9;i++);

这两行多了 分号

呵呵

a[t]=num; 这个插入以后,应该退出循环,要加 break

见程序


一个重大的错误,嵌套的内外循环 用同一个变量,奇特!

怎么能这样?

3. 求直接插入排序c语言完整程序

#include <stdio.h>
#include <stdlib.h>

void insert(int *arr, int a, int n){ /*0到n-1都已排好序*/
int i;
int key = a;

for(i=0; i<n; i++){
if(key < arr[i]){
int j;
for(j=n-1; j>=i; j--){
arr[j+1] = arr[j];
}
arr[i] = key;
return;
}
}

arr[n] = key;
return;
}

void sort(int *arr, int size){
if(size<2)
return;
int i;
for(i=1; i<size; i++){
insert(arr, arr[i], i);
}
}

void main(){
int i, n, *arr;

printf("请输入数组的大小 n = ");
scanf("%d", &n);

arr = (int*)malloc(sizeof(int)*n);

printf("请输入%d个数组元素:\n", n);
for(i=0; i<n; i++){
scanf("%d", &arr[i]);
}

printf("在排序前,数组为:");
for(i=0; i<n; i++){
printf("%d ", arr[i]);
}

printf("\n调用排序函数中...\n");
sort(arr, n);

printf("在排序后,数组变为:");
for(i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
}

===
刚刚写好,并在VC2010下编译通过的,把静态数组改成了动态数组,更加灵活。。。

4. 谁能给个c语言插入排序的代码啊😄

#include<stdio.h>
#include<stdlib.h>

voidinsertSort(int*,int);

intmain()
{
inti,n;
intnum[10];

while(scanf("%d",&n)!=EOF)
{
//接收无序数据
for(i=0;i<n;i++)
{
scanf("%d",num+i);
}

//快速排序
insertSort(num,n);

//打印输出
for(i=0;i<n;i++)
{
printf("%d",num[i]);
}
printf(" ");
}
return0;
}

voidinsertSort(int*array,intlen)
{
inti,j,temp;

for(i=1;i<len;i++)
{
temp=array[i];
for(j=i-1;j>=0;j--)
{
if(array[j]>temp)
{
array[j+1]=array[j];
}else
{
break;
}
}
array[j+1]=temp;
}
}

5. C语言编程插入法排序

算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
范例程式码
void insertion_sort(int array[], int first, int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;

while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp;
}
}

6. 求c语言里插入排序法的程序

#include <stdio.h>
int main ()
{
int n[10];
int i, j, k;
int temp;

for (i = 0; i <= 9; i++)
{
printf ("请输入第%d个数:", i + 1);
scanf ("%d", &n[i]);
}
printf ("数组排序前效果如下\n");
for (i = 0; i <= 9; i++)
{
printf ("%d ", n[i]);
}
printf ("\n");

for (i = 1; i <= 9; i++)
{
for (j = i - 1; j >= 0; j--)
{
if (n[j] < n[i])
break;
}
if (j != i - 1)
{
temp = n[i];
for (k = i; k >= j + 1; k--)
n[k] = n[k - 1];
n[j + 1] = temp;
}
}
printf ("数组排序后效果如下\n");
for (i = 0; i <= 9; i++)
{
printf ("%d ", n[i]);
}
printf ("\n");
return 0;
}

7. 插入排序 C语言

#include<stdio.h>
intmain()
{intt,n,i,j,x,a[200];
scanf("%d",&t);
for(i=0;i<t;i++)
{scanf("%d%d",&n,&x);
for(j=1;j<=n;j++)
scanf("%d",&a[j]);
a[0]=x;
j=n;
while(a[j]>x)
{a[j+1]=a[j];
j--;
}
a[j+1]=x;
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("%d ",a[i]);
}
return0;
}

8. c语言插入排序法

插入排序(insertion sort)如果需要对一个小型数组进行升序排列,那么可以选用插入排序,插入排序可以用打牌时对摸起的牌根据牌的点数来对其进行插入排列来描述。可以把左手中的牌比做已经摸起的牌,即已经被排列好的牌,左手可以容纳的牌数的空间可以假想为和要摸的牌的总数相同;而在桌子上的那部分没摸的牌则是未被排序的牌,这二者的关系可以抽象为数组中已经被排序好的部分和未被排序好的部分。一开始摸起的第一张牌不需要排序,可以认定其为已排序的牌。如果用外层循环for来表示摸起的牌的话,则可以抽象为:// 对象数组
// 桌子上的牌
int A[] = {5,1,3,6,2,4};// 从数组的第二个元素开始抽取
for(int i = 1; i < sizeof A/sizeof A[0]; ++i)
{
int pick = A[i]; // 被摸起的牌
int j = i - 1; // j记录已排序部分的最后一张牌的位置. . .
}而后摸起的排要根据排列策略和先前摸起的牌的点数的大小来确定其插入的合适位置,这里示范的排列策略是升序排列,摸起了这张牌后,便自右向左地和手中的牌进行比较。把pick称作摸起的牌,如果pick比手中的牌小,则手中较大的那张牌就向右挪一位,pick再和下一张牌做比较,如果下一张牌仍然比pick大,那么那张牌便也向右移动一个位置,依此类推。如果手中下一张和pick比较的牌比pick小,那么pick就被插入在了手中前一张牌移动后空下的位置;或者手中所有的牌都比pick大,那么所有的牌就都向右移动过一个位置,所以pick最终被插入在了手中最左边的位置。这个过程可以抽象为:// 对象数组
// 桌子上的牌
int A[] = {5,1,3,6,2,4};
// 从数组的第二个元素开始抽取
for(int i = 1; i < sizeof A/sizeof A[0]; ++i)
{
int pick = A[i]; // 被摸起的牌int j = i - 1; // j记录已排序部分的最后一张牌的位置// 如果循环了j+1次,即j = -1时还未找到比pick小的牌
// 那么pick就是最小的牌被插入在位置A[0]处// A[j]是当前手中和pick进行比较的牌
while(j >= 0 && A[j] > pick)
{
// 未找到可插入位置,则A[j]向后挪一位
A[j+1] = A[j];
// j减1继续向左定位手中下一张供和pick比较的牌--j;
}// while结束后,j+1所表达的位置便是pick可以插入的位置
A[j+1] = pick;
}// 对于有N个元素的数组A,采用插入排序法排序时,当外层循环进行了N-1次后排序完毕

9. 怎样用C语言程序实现插入法排序与起泡法算法排序

直接插入排序的基本思想是:
当插入第i
(i≥
1)
个对象时,前面的V[0],
V[1],
…,
v[i-1]已经排好序。这时,用v[i]的关键码与v[i-1],
v[i-2],
…的关键码顺序进行比较,找到插入位置即将v[i]插入,原来位置上的对象向后顺移。
用c实现的插入排序法,先输入10个数,然后利用插入排序法进行排序,将结果输出。
#include
"stdio.h"
#include
"conio.h"
main()
{
int
a[10],r[11];
int
*p;
int
i,j;
for(i=0;i<10;i++)
{
p=&a[i];
printf("please
scan
the
NO:
%d\n",i);
scanf("%d",p);
r[i+1]=a[i];
}
r[0]=1;
for(i=2;i<=10;i++)
{
r[0]=r[i];
j=i-1;
while(r[j]>r[0])
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0];
}
for(i=1;i<=10;i++)
{p=&r[i];printf("form
min
to
max
the
NO:
%d
value=%d\n",i,*p);}
getch();
}
起泡排序:需反复比较相邻两个数的比较与交换这两种基本操作。对相邻的两个数进行比较时,如果反面的数大于(或小于)前面的数,将这两个数进行交换,大的数(小的数)往前冒。
void
Sort(a,n)
/*排序*/
{
float
a[];
int
n;
{
int
i;
int
flag;
float
t;
do{
flag=0;
for(i=0;i<=n-2;i++)
if(a[i+1]>a[i])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
flag=1;
}
}while(flag);
}