c语言10个数小到大插入法排序

供稿:hz-xin.com     日期:2025-01-14
C语言编写程序,用插入法将10个数进行从大到小排序

#include
void main()
{
int a[11],n,i,j;
printf("Please Input 10 Numbers:
");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
for(i=2;i<=10;i++)
{
a[0]=a[i];
for(j=i-1;a[j]>a[0];j--)
a[j+1]=a[j];
a[j+1]=a[0];
}
for(i=1;i<=10;i++)
printf("%d ",a[i]);
printf("
");
}


1、数组形式。
解题思路: 判断比较的躺数,每趟相邻的两个数再进行比较,应用两次 for 循环
具体代码:
void PrintArr(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
return 0;
}
void BubbleSort(int arr[],int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - i - 1; j++)//用for循环的元素个数控住多少趟
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz);
PrintArr(arr, sz);
system("pause");
return 0;
}
2、指针形式。
创建两个变量start、end,记住数组起始与结束位置元素的地址,应用两次 while 循环交换地址
指针冒泡排序 :
void PrintArr(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
return 0;
}
void BubbleSort(int *arr, int sz)
{
int start = arr;
int end = arr + sz - 1;
//趟数
while (start < end)
{
int *cur = start;
while (cur < end)
{
if (*cur > *(cur+1))
{
int tmp = *cur;
*cur = *(cur + 1);
*(cur + 1) = tmp;
}
cur++;
}
end--;
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz);
PrintArr(arr, sz);
system("pause");
return 0;
}

扩展资料:算法原理
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

#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();
}

c语言试题: 对21,33,42,19,6,67进行排序并给出结果(小→大)
使用的是插入法排序,如下:include <stdio.h> include <stdlib.h> define MAX 100 InsertSort(int a[],int len) { int i,j;for(i=2;i<=len;i++) { a[0]=a[i];j=i-1;while(a[j]>a[0]) {a[j+1]=a[j];--j;} a[j+1]=a[0];} } void PrintfNums(int a[],int ...

C语言:输入一个10个整数的数组,按从小到大排序输出,然后再输入一个整数...
实在觉得繁琐,你的程序有2个地方可以改进 1,排序的时候不用冒泡算法,取用其它的排序算法 2,插入的时候可以用二分插入法,比你上面的算法效率高多了

插入法C语言
整个过程需要进行n-1次插入操作,以将所有元素排序。在有序序列中寻找插入位置时,可以从有序序列的最后一个数往前找,同时向后移动元素以准备插入空间。这种算法通常用于对小规模数据进行排序,或在部分已排序的数据基础上进行调整。下面是一个用插入排序法对10个整数进行降序排序的示例源代码:c#include ...

...将10个数存放其中,对其用直接插入法排序实现升序排列,用c语言_百度...
include<stdio.h> void main(){ int a[10]={1,5,3,2,4,9,0,7,8,6},b[10];int i,j,temp;for(i=0;i<10;i++){ b[i]=a[i];for(j=i-1;j>=0;j--){ if(b[j]>b[j+1]){ temp=b[j+1];b[j+1]=b[j];b[j]=temp;} } } for(i=0;i<10;i++){ printf...

设计C语言程序,用一维数组输入N个整数,将这n个整数按从大到小排列
算法要求:用起泡法对10个整数按升序排序。算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。算法...

对输入的十个数进行排序并输出除了起泡法,还有哪几种算法呀?
比较简单的一个——插入法 include<stdio.h> define N 6 void main(){ int a[N],n,i,j,k;scanf("%d",&a[0]); \/\/1.输入数据 for(i=1;i<N;i++) \/\/2.输一数排一数 { scanf("%d",&n);\/\/输数据 for(j=0;j<i;j++)if(n=j;k--)a[k+1]=a[k];a[j]=n;}...

用直接插入法将12,3,7,4,11,9,8从小到大排序
刚写了一个。。希望有所帮助。。include<stdio.h> include<conio.h> int a[7]={12,3,7,4,11,9,8},i,b[7],j,k;void insert(int i,int j)\/\/执行插入 { for(k=i;k>j;k--)b[k]=b[k-1];b[k]=a[i];} void find(int i)\/\/发现插入口 { for(j=0;ja[i]){ inser...

在键盘上输入10个元素,利用插入法降序排列,现输入一个数x,要求插入到...
for (j=i+1;j<10;j++)if (p[i]<p[j]){ k=p[i];p[i]=p[j];p[j]=k;} } void main(){ int a[11],i,j,x;printf("请输入10个数: \\n");for (i=0;i<10;i++){ printf("第%d个数: ",i+1);scanf("%d",&a[i]);} sort(a);printf("排序后的数组: \\n");...

用c语言写一个算法(折半或二分法),实现可以选择1到20的从小到大以
解:用有序列插入法排序,过程如下:第一步:7 1 (前两个数7,1排成有序列)第二步:7 3 1 (第3个数3按要求插入到已排好的有序列中)第三步:12 7 3 1 (第4个数12按要求插入到已排好的有序列中)第四步:12 8 7 3 1 (第5个数8按要求插入到已排...

C语言里面把输入的10个数按一定的顺序输出怎么敲得啊
使用冒泡排序或者选择排序法 include <stdlib.h> int main(){ int i,j,t,a[10];printf("Please input 10 integers:\\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++) \/* 冒泡法排序 *\/ for(j=0;j<10-i-1;j++)if(a[j]>a[j+1]){t=a[j];\/* 交换a...