c - 对数组进行排序 - C 语言

标签 c arrays sorting

我尝试编写一个排序函数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/

相关文章:

c - 枚举C,全局变量错误: variable has initializer but incomplete type

c - noNameFunc1 在这里如何真正工作以及如何向它传递值?

javascript - 哪个 bool 运算更快? < 或 <=

在 C 中创建具有硬编码值的字符串数组

javascript - 使用 jquery 删除数组列表前的引号

arrays - VBScript 编码挑战 : Sort Array by String Length after Split Command

Java 结合自定义比较器使用比较器

cURL 在 Release模式下崩溃,而不是在调试中

C语言: i dont understand why it works

java - 日期 ArrayList 的排序