代码如下,
int main()
{
int* pi=new int[30];
for (int i = 0; i < 30; i++)
{
*(pi + i) = rand() % 700 + 200;
}
for (int i = 0; i < 29; i++)
{
int k = i;
for (int j = i + 1; j < 30; j++)
{
if (*(pi+k) > *(pi+j)) k = j;
if (k != i)
{
int temp = *(pi + k); *(pi + k) = *(pi + j); *(pi + j) = temp;
}
}
}
for (int i = 0; i < 30; i++)
cout << *(pi + i) << " \t ";
delete[] pi;
return 0;
}
输出结果:241 467 800 524 858 864 562 691 827 804 821 736 716 682 602 495 492 478 469 395 391 381 361 353 345 318 305 242 234 227
有两点错误,主要是if(k!=i)这个判断处理,一是要放到第一层循环内,二是交换数据是pi+k和pi+i对应数据交换,不是pi+j
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int* pi=new int[30];
int i,j;
for (i = 0; i < 30; i++)
{
*(pi + i) = rand() % 700 + 200;
}
for (i = 0; i < 29; i++)
{
int k = i;
for (j = i + 1; j < 30; j++)
{
if (*(pi+k) > *(pi+j))
k = j;
}
if (k != i)
{
int temp = *(pi + k);
*(pi + k) = *(pi + i);
*(pi + i) = temp;
}
}
for (i = 0; i < 30; i++)
cout << *(pi + i) << " \t ";
delete[] pi;
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632