在学习C语言的选择循环排序,但是结果没出来,求解
#include <stdio.h>
#include <stdlib.h>
//
#define N 9
static void xz(void)
{
int i,j,k,tmp;
int a[N]={1,2,4,6,7,8,3,9,2};
for(i=0;i<sizeof(a)/sizeof(a[i]);i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N-1;j++)
{
if(a[j]<a[k])
k=j;
//当a[1]<a[0],的时候k的值就不在等于i于是,便进行if判断
}
/*为什么要定义K?,根据举例子,我们可以知道,k=i,当我们进入第二次排列的时候,这时候需要进行排序的就不是a[0],而是a[0+1],从a[0]+1这里开始进行第二轮的排序*/
if(i != k)
{
/*也就是a[j]<a[i]的时候,然后我们再进行两两交换*/
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
for(i=0;i<sizeof(a)/sizeof(a[i]);i++)
printf("%d ",a[j]);
printf("\n");
}
int main()
{
xz();
exit(0);
}
~
选择排序的循环部分错了,选择排序是从第一个元素开始,依次和后面几个元素进行比较,将最大(最小)拿到第一个位置,之后重复此过程。k的作用是标记,将最大(最小)数的下标进行标记,将标记的这个下标的数与第一个数进行交换,之后重复此过程,这就是选择排序。
【以下回答由 GPT 生成】
你的问题是你编写的选择排序函数没有正确输出排序结果。针对这个问题,我将提供一些可能导致错误的原因和解决方案,并解释代码中的一些技术细节。
在你的代码中,存在两个问题导致排序结果输出不正确:
在内层循环中,j
的取值范围应该是从 i + 1
到 N - 1
,而不是 N - 1
。这是因为你希望每次选择最小的元素放在已排序部分的末尾,所以内层循环的起始位置应该是已排序部分的下一个位置。
在输出排序结果时,你错误地使用了变量 j
,而应该使用变量 i
。这是因为在选择排序中,变量 i
循环控制已排序的部分,而变量 j
在内层循环中用于查找最小元素。
修正上述的问题后,你可以得到正确的排序结果。下面是修正后的代码:
#include <stdio.h>
#include <stdlib.h>
#define N 9
static void selectionSort()
{
int i, j, k, tmp;
int a[N] = {1, 2, 4, 6, 7, 8, 3, 9, 2};
for (i = 0; i < sizeof(a) / sizeof(a[i]); i++)
printf("%d ", a[i]);
printf("\n");
for (i = 0; i < N - 1; i++)
{
k = i;
for (j = i + 1; j < N; j++) // 修正内层循环的结束条件
{
if (a[j] < a[k])
k = j;
// 当a[j] < a[k]时,更新k的值
}
if (i != k)
{
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
for (i = 0; i < sizeof(a) / sizeof(a[i]); i++)
printf("%d ", a[i]); // 修正输出变量为i
printf("\n");
}
int main()
{
selectionSort();
exit(0);
}
这样修改后,你应该能够得到正确的排序结果。希望这个解决方案对你有帮助!
【相关推荐】
#include <stdio.h>
#include <stdlib.h>
#define N 9
static void xz(void) {
int i, j, k, tmp;
int a[N] = {1, 2, 4, 6, 7, 8, 3, 9, 2};
for (i = 0; i < sizeof(a) / sizeof(a[i]); i++)
printf("%d ", a[i]);
printf("\n");
for (i = 0; i < N - 1; i++) {
k = i;
for (j = i + 1; j < N; j++) { // 修正此处的循环条件
if (a[j] < a[k])
k = j;
}
if (i != k) {
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
for (i = 0; i < sizeof(a) / sizeof(a[i]); i++)
printf("%d ", a[i]);
printf("\n");
}
int main() {
xz();
exit(0);
}