gpt4 book ai didi

c - 对一维数组进行排序的函数不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:35 27 4
gpt4 key购买 nike

我需要制作一个函数,以这样的方式对一维数组进行排序,小于第一个元素的数字移到它前面,大于或等于的数字移到后面。这是我的代码:

#include<stdio.h>

void sort(int a[], int n);

int main(){
int a[10], i, m;
do{
printf("Enter number of elements: ");
scanf("%d", &m);
} while (m < 1 || m > 10);

for (i = 0; i < m; i++)
scanf("%d", &a[i]);

for (i = 0; i < m; i++)
sort(a, m);

for (i = 0; i < m; i++)
printf("%d ", a[i]);

return 0;
}

void sort(int a[], int m){
int i, j, p, temp;
p = a[1];

for (j = 2; j < m; j++){
if (p >= a[j]){
temp = a[j];
a[j] = a[1];
a[1] = temp;
}
}
}

最佳答案

排序功能是个问题。通过纸上的逻辑工作,你会看到发生了什么。您的 p 已固定到位,这是问题的一部分。您会注意到您的输入正在四处移动,这只是移动方式的问题

如果你把它放在适当的位置,这个排序功能应该可以工作。

void sort(int a[], int m){
int i, j, p, temp;

for (i =0; i<m;i++){
for(j=i;j<m;j++){
if (a[j]<a[i]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}

编辑,哦,我可能误解了你的问题。这就是说您不希望它们以完全完美的顺序排列,而是您希望小于起始元素的元素位于其前面,但顺序与输入时的顺序相同?

编辑 2:对不起,我误解了你之前的问题。这是我想出的。

#include<stdio.h>

void sort(int a[], int n);

int main(){
int a[10], i, m;
do{
printf("Enter number of elements: ");
scanf("%d", &m);
} while (m < 1 || m > 10);

for (i = 0; i < m; i++)
scanf("%d", &a[i]);

sort(a, m);

for (i = 0; i < m; i++)
printf("%d ", a[i]);

return 0;
}

void sort(int a[], int m){
int i, j, p, temp;
int pindex;

p = a[0];
pindex =0;

for (i =0; i<m;i++){
if(a[i]<p){
temp = a[i];
for(j=i;j>pindex;j--){
a[j] = a[j-1];
}
a[pindex]=temp;
pindex++;
}
}

}

我认为您最初的方法最大的问题是每次循环运行时您都将 p 设置为第一个元素。如果 p 随着每次迭代而改变,它最终会破坏一切。

我所做的更改:我使用名为 pindex 的变量跟踪 p 的当前位置。每当我找到一个小于 p 的元素时,我都会向后滑动每个元素,直到到达 p(包括 p)。然后我将找到的元素放在索引中 p 所在的位置。

希望对您有所帮助。

关于c - 对一维数组进行排序的函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50357133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com