| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2725 人关注过本帖
标题:[讨论]关于插入排序法的实现
取消只看楼主 加入收藏
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:6 
[讨论]关于插入排序法的实现
插入排序法:
輸入一个個未排序的數字序列,輸出已排序的數字序列。
想法是一個一個插入已排序的序列,到正確的位置。
每次插入時,由後往前一個一個比較,直到正確位置。

我在网上找的插入排序法的例子不太能看懂:
#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();
 }

谁能给详细分析下这个排序法的用法???
搜索更多相关主题的帖子: 序列 include int 
2007-05-29 18:13
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
就是说定义2个数组a[]和r[],
假设一个是排序用的数组r[],一个是排序前的数组a[].
排序前的数组a[]用来存放输入的数,然后把这个排序前的数组a[]里的数依次放到排序用的那个数组r[]中,从r[1]开始存放。
再把r[]中从第二个数开始的每个数依次放到r[0]中,。。。。。。
j=i-1;
while(r[j]>r[0])/ * r[0]与 i 前面的数比较( i 前面的数已经排好序了)*/
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0]; /* 插入r[0] */
这段还是不太明白。。。。。。






生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 21:10
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
 #include "conio.h"
这个头文件是干嘛用的???

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 21:20
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
明白了一点
但是我写的这个调用函数怎么就是不对啊
void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
for(i=2;i<=n;i++)
{

s=name[i];
j=i-1;
while(name[j]>s)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 23:37
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
char c;
for(i=1;i<n;i++)
{
c=name[i][0];
s=name[i];
j=i-1;
while(j >= 0 && name[j][0] > c)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}

改了,运行结果不对。。。。。。



生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-30 08:48
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
这样就行了
void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
for(i=1;i<n;i++)
{
s=name[i];
j=i-1;
while(j >= 0 && strcmp(s, name[j]) < 0)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-30 11:21
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
谢谢大家的热心帮助啊。。。

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-30 17:44
快速回复:[讨论]关于插入排序法的实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013798 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved