数组排序-C语言

数组排序-C语言,c,arrays,sorting,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

我曾尝试编写排序函数
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]);
    }
}
#包括
无效排序(int*缓冲区,int数组[],int大小){
对于(int i=0;i=1&&buffer[i]
但是,该程序的输出是
222

老实说,我甚至不知道三个相同的元素是如何被放入缓冲区的

什么地方出了问题?

内部while循环和外部for循环使用相同的变量。使用不同的变量,并在for的每次迭代中将
i
的值复制到它。

您正在while循环中修改
i
。您在两个循环中使用相同的变量。这太简单了-我不知道我怎么会错过它。谢谢,这实际上解决了我的问题。