永发信息网

简单选择排序问题

答案:2  悬赏:50  手机版
解决时间 2021-01-29 10:18
  • 提问者网友:原来太熟悉了会陌生
  • 2021-01-28 13:36
我写了一个简单选择排序,觉得很简单,结果也对。但是我发现书上的却很复杂,结果也不对。我不知道到底是我弄错了,还是书上弄错了。
下面我将我的程序和书上的程序都贴上,大家帮我看看到底是哪里有问题吧。
我的程序:
#include
using namespace std;

#define N 5

int main()
{
int array[N] = {3,7,2,1,8};
int i,j,k;
for(i=0; i {
for(j=i+1; j {
if(array[j] < array[i])
{
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}

for(i=0; i {
cout< }
cout<<'\n';

return 0;
}

书上的程序:
#include
using namespace std;

#define N 5

int main()
{
int array[N] = {3,7,2,1,8};
int i, j, k;
for(i=0; i {
j = i;
for(k=i+1; k {
if(array[k] < array[j])
j = k;
if(i != j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}

for(i=0; i {
cout< }
cout<<'\n';

return 0;
}
最佳答案
  • 五星知识达人网友:由着我着迷
  • 2021-01-28 14:20
书上的程序for循环修改为下面
for(i=0; i {
j = i;
for(k=i+1; k {
if(array[k] < array[j])
j = k;
}
if(i != j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
这样应该可以。
你的方法在内循环中只要找到一个小的就进行数值交换。
书上提供的方法是在内循环中先使用j记录当前最小数的位置,循环完毕后在进行数值的交换
全部回答
  • 1楼网友:毛毛
  • 2021-01-28 14:41
在冒泡排序的基础上稍加了修改,感觉很简单,相关的注释和说明参看我写在你的冒泡排序问题中的内容。 程序代码如下,仅供参考: # include "stdio.h" # include "time.h" # include "stdlib.h" # define n 400 void init(int a[],int n){ int i; srand ( ( unsigned int ) time ( null ) ); for(i=0;ia[j]) min=j; num=a[i]; a[i]=a[min]; a[min]=num; printf("("); printf("%c",32); for(m=0;m
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯