C程序按两个连续数组元素的递增顺序进行排序

时间:2018-04-20 21:13:57

标签: c arrays sorting

我需要创建一个程序,按升序对连续数组元素的差异进行排序。例如:第一个和第二个元素之间的差异最小,第二个和第三个元素之间的差异更大,依此类推。我无法想出一个好的算法来以期望的方式对数组进行排序。我唯一想到的是切换2个元素的位置,然后如果顺序不正确再次切换并保持直到它的排序。我很确定它也没有很好地执行。

这是我的代码:

#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]);
}

示例输出:

 Number of elements: 4
 Enter array elements:
 1 3 7 12
 Sorted array:
 1 7 12 3

但我在测试期间得到3 1 7 12。

1 个答案:

答案 0 :(得分:1)

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

你有一组采用和候选元素。 原来 take = [] 候选人= [1,3,7,12]

您可以选择两个元素来创建第一个区别。 然后选择满足升序要求的第三个元素。

如果你发现了一个,那么如果你没有停下来并回到可以改变所取元素的地步。

如果您达到了能够找到满足要求的解决方案的程度,那么您将继续查看搜索空间。