用指针方法对10个整数按由大到小顺序排序的源程序,我不明白定义的sort函数中for循环里面的内容。
答案:4 悬赏:0 手机版
解决时间 2021-03-31 11:10
- 提问者网友:放下
- 2021-03-30 20:20
用指针方法对10个整数按由大到小顺序排序的源程序,我不明白定义的sort函数中for循环里面的内容。
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-03-30 21:10
#include
int main()
{
void sort(int x[],int n);
int i,*p,a[10];
p = a;
printf("please enter 10 integer numbers:");
for(i = 0;i < 10;i++) scanf("%d",p++);
p = a;
sort(p,10);
for(p = a,i = 0;i < 10;i++) {
printf("%d ",*p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n) { //选择排序
int i,j,k,t;
for(i = 0;i < n - 1;i++) {
k = i; // 假定索引为i的元素最大
for(j = i + 1;j < n;j++) // 从索引为i的下一个元素开始比较
if(x[j] > x[k]) k = j; // 如果还有更大的,则记录这个元素的索引
if(k != i) { // 确实有更大的元素,则进行交换
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
}追问你好,你的那个“确实”太精辟了!还有几个问题,麻烦了,问题1、我觉得第内嵌的for循环只包括
for(j = i + 1;j < n;j++)
if(x[j] > x[k]) k = j;
外循环的第一次(i=0)结束后,再进行
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
是这样吗?
问题2:你是怎么判断一个循环的结束的,就好比这道题内嵌的这个循环。
多谢。追答1、是的。
2、外循环遍历n - 1个元素,内循环每次都比前一次循环少一次。追问索引改变会改变数组元素中的值吗???!!!
int main()
{
void sort(int x[],int n);
int i,*p,a[10];
p = a;
printf("please enter 10 integer numbers:");
for(i = 0;i < 10;i++) scanf("%d",p++);
p = a;
sort(p,10);
for(p = a,i = 0;i < 10;i++) {
printf("%d ",*p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n) { //选择排序
int i,j,k,t;
for(i = 0;i < n - 1;i++) {
k = i; // 假定索引为i的元素最大
for(j = i + 1;j < n;j++) // 从索引为i的下一个元素开始比较
if(x[j] > x[k]) k = j; // 如果还有更大的,则记录这个元素的索引
if(k != i) { // 确实有更大的元素,则进行交换
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
}追问你好,你的那个“确实”太精辟了!还有几个问题,麻烦了,问题1、我觉得第内嵌的for循环只包括
for(j = i + 1;j < n;j++)
if(x[j] > x[k]) k = j;
外循环的第一次(i=0)结束后,再进行
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
是这样吗?
问题2:你是怎么判断一个循环的结束的,就好比这道题内嵌的这个循环。
多谢。追答1、是的。
2、外循环遍历n - 1个元素,内循环每次都比前一次循环少一次。追问索引改变会改变数组元素中的值吗???!!!
全部回答
- 1楼网友:不甚了了
- 2021-03-30 23:42
这个sort,冒泡排序清晰明了,是你的sort难看懂而已
void sort(int a[],int n)
{
int t;
for(int j=0;j for(int i=0;i if(a[i] {
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
void sort(int a[],int n)
{
int t;
for(int j=0;j
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
- 2楼网友:罪歌
- 2021-03-30 22:52
冒泡排序的过程是两两比较大小第一趟选出最小的放在首位第二次选出次小放在第二位直到排序结束。你说的K=J不是结束而是找到了要进行前后替换得数的下标,K=J就是把要替换得下标现赋给K然后进行下面的替换:T=a[i]
- 3楼网友:过活
- 2021-03-30 22:16
#include
int main()
{
void sort(int x[],int n);
int i,*p,a[10];
p=a;
printf("please enter 10 integer numbers:");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%d ",*p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n)
{
int i,j,k,t; // k用来指向最大的一个数
for(i=0;i {
k=i; //初始化k,指向第一个数,开始时,只有一个数,所以最大,
//下边的程序是把第i个数与第j个数作比较,把数向前挪动
for(j=i+1;j if(x[j]>x[k]) //如果第j个数大于前边所有数中的最大数
k=j; //则k指向第j个最大的数
if(k!=i) //如果上边的if成立,即前边所有数中的最大数没有第j个大,则执行下边的程序
{
//以下程序完成将最大数放在最前边(i所指的位置),
//第一次i的循还则将最大数放在第一个位置
//第二次i的循还则将除第一次以外的最大数放在第二个位置
//。。。
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
希望对你有帮助。。追问谢谢 你的回答非常详细 和那个精辟哥一样厉害 再帮我一下 和他同样的问题 你看一下
int main()
{
void sort(int x[],int n);
int i,*p,a[10];
p=a;
printf("please enter 10 integer numbers:");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%d ",*p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n)
{
int i,j,k,t; // k用来指向最大的一个数
for(i=0;i
k=i; //初始化k,指向第一个数,开始时,只有一个数,所以最大,
//下边的程序是把第i个数与第j个数作比较,把数向前挪动
for(j=i+1;j
k=j; //则k指向第j个最大的数
if(k!=i) //如果上边的if成立,即前边所有数中的最大数没有第j个大,则执行下边的程序
{
//以下程序完成将最大数放在最前边(i所指的位置),
//第一次i的循还则将最大数放在第一个位置
//第二次i的循还则将除第一次以外的最大数放在第二个位置
//。。。
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
希望对你有帮助。。追问谢谢 你的回答非常详细 和那个精辟哥一样厉害 再帮我一下 和他同样的问题 你看一下
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯