Ⅰ 数组插入排序法c语言
外循环写的不对,内循环也是错了。首先外循环要从0开始,直到8就可以结束了。内循环从i +1开始,到9就可以结束了,所以外循环应该这样写:for (i=0;i<9;i++),内循环为:for (j=i+1;j<10;j++)。外循环从第一个数也就是a[0]开始,依次和后面的每一个数进行比较,所以内循环从i +1开始,直到最后一个数为止,这样就能保证第一个数为最大的。然后再开始第二个数,以此类推。等到外循环到a [8]也就是倒数第二个数时,内循环就执行一次,所有的数就能够比较完了,所以没必要再进行最后一个数了。
Ⅱ C语言如何输入十个数,按从大到小顺序排列!
用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:
#include<stdio.h>
int main()
{
int i,j,a[10],t;
printf("输入数");
for (i = 0; i < 10; i++)
scanf("%d",&a[i]);
for (i = 0; i < 10; i++)
{
for (j = i + 1; j < 10;j++)
if (a[i] < a[j]){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
printf("从大到小");
for (i = 0; i < 10; i++)
printf("%2d", a[i]);
return 0;
}
(2)数字插入排序c语言扩展阅读:
代码还可以设计,如下:
#include<stdio.h>
int main()
{
int a[10],i,j,t;//定义数组;
for(i=0;i<10;i++){
scanf("%d",&a[i]);//给数组赋值;
}
for(i=0;i<9;i++)//10个数,进行9轮比较;
for(j=0;j<10-i;j++){//第一个数比较9次,依次递减;
if(a[j]>a[j+1]) {//交换值;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);//输出数组的值;
}
return 0;
}
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
printf(" ");
}
Ⅲ 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次后排序完毕
Ⅳ c语言中插入排序的基本思想是什么
插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
Ⅳ C语言编程 排序并插入
写个样例给你看看吧
#include<stdio.h>
intmain()
{
intn,a[11],i,j,t,v;
//scanf("%d",&n);
scanf("%d",&a[0]);//输入第一个数
for(i=1;i<9;++i){//剩下的八个
scanf(",%d",&a[i]);
}
n=9;
for(i=0;i<n;++i){//选择排序
t=i;
for(j=i+1;j<n;++j){
if(a[t]>a[j])t=j;
}
if(t!=i){
v=a[t],a[t]=a[i],a[i]=v;
}
}
scanf("%d",&v);//要插入的数
for(i=n-1;i>=0;--i){
if(a[i]>v){
a[i+1]=a[i];
}
elsebreak;
}
++i;//插入位置
a[i]=v;
n++;
for(i=0;i<n;++i){//输出
if(i==0)printf("%d",a[i]);
elseprintf(",%d",a[i]);
}
printf(" ");
return0;
}