按升序对两个连续数组元素的差进行排序的C程序

按升序对两个连续数组元素的差进行排序的C程序,c,arrays,sorting,C,Arrays,Sorting,我需要制作一个程序,将连续数组元素的差按升序排序。例如:第一个元素和第二个元素之间的差异最小,第二个元素和第三个元素之间的差异较大,以此类推。我想不出一个好的算法来按期望的方式对数组进行排序。我唯一想到的是切换两个元素的位置,如果顺序不对,则再次切换,并将其保持到排序为止。我敢肯定它也没有很好地执行 这是我的密码: #include<stdio.h> void InputArray(int a[], int size); void PrintArray(int a[], int si

我需要制作一个程序,将连续数组元素的差按升序排序。例如:第一个元素和第二个元素之间的差异最小,第二个元素和第三个元素之间的差异较大,以此类推。我想不出一个好的算法来按期望的方式对数组进行排序。我唯一想到的是切换两个元素的位置,如果顺序不对,则再次切换,并将其保持到排序为止。我敢肯定它也没有很好地执行

这是我的密码:

#include<stdio.h>
void InputArray(int a[], int size);
void PrintArray(int a[], int size);
void sort(int a[], int size);

void main(){
    int a[100], i, n;
do{
    printf("Number of elements: ");
    scanf("%d", &n);
} while (n < 1 || n > 100);

InputArray(a, n);
sort(a, n);
PrintArray(a, n);
printf("\n");
}

void InputArray(int a[], int size){
    printf("Enter array elements:\n");
for (int i = 0; i < size; i++)
    scanf("%d", &a[i]);
}
void sort(int a[], int size){
    int i, temp;
for (i = 0; ;i++){
    if ((a[i] - a[i + 1]) < (a[i + 1] - a[i + 2]))
        break;
    temp = a[i];
    a[i] = a[i + 1];
    a[i + 1] = temp;

    if (i == size - 1){
        temp = a[size - 1];
        a[size - 1] = a[0];
        a[0] = temp;
        i = -1;
    }
 }
 }
  void PrintArray(int a[], int size){
    printf("Sorted array:\n");
    for (int i = 0; i < size; i++)
    printf("%d ", a[i]);
}

但我在测试中得到31712分

一个起点可以是创建一个包含所有元素之间所有差异的N^2 2D矩阵,然后使用回溯解决方案

您有一组已获取和候选元素。 开始 采取=[] 候选人=[1,3,7,12]

选择两个元素以创建第一个差异。 然后选择满足升序要求的第三个元素

如果你找到一个你继续,如果你不停下来,回到一个点,你可以改变采取的元素


如果您找到了满足要求的解决方案,请将其返回,否则您将继续查看您的搜索空间。

对不起,但是我一点也不明白。为什么你的例子的解不是13712=245?它实际上是1-3=-23-7=-47-12=-5,不是升序,因为有负数
 Number of elements: 4
 Enter array elements:
 1 3 7 12
 Sorted array:
 1 7 12 3