我尝试编写一个排序函数sort(int *buffer, int array[], int size)
它的工作方式类似于插入排序 - 它从数组中获取第一个元素,将其设置为缓冲区的第一个元素,然后检查数组中显示的下一个值是否大于存储的最后一个值在缓冲区中。如果是,它会不断交换两个元素,直到一切都就位。这是我的最小工作示例:
#include <stdio.h>
void sort(int *buffer, int array[], int size) {
for(int i = 0; i < size; i++) {
buffer[i] = array[i];
while(i >= 1 && buffer[i] < buffer[i-1]) {
int tmp = buffer[i-1];
buffer[i-1] = buffer[i];
buffer[i] = tmp;
printf("i = %d i: %d, i -1 : %d \n",i, buffer[i], buffer[i-1]);
i--;
}
}
}
int main(void) {
int array[3] = {4,3,2};
int buffer[3];
sort(buffer, array, 3);
for(int i = 0; i < 3; i++) {
printf("%d", buffer[i]);
}
}
但是,这个程序的输出是 222
老实说,我不明白如何可能将三个相同的元素放入缓冲区中。
可能出了什么问题?
最佳答案
您在内部 while 循环和外部 for 循环中使用相同的变量。使用不同的变量,并在 for 的每次迭代中将 i
的值复制到该变量。
关于c - 对数组进行排序 - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48744576/