我需要创建一个程序,按升序对连续数组元素的差异进行排序。例如:第一个和第二个元素之间的差异最小,第二个和第三个元素之间的差异更大,依此类推。我无法想出一个好的算法来以期望的方式对数组进行排序。我唯一想到的是切换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。
答案 0 :(得分:1)
一个起点可能是创建一个N ^ 2 2D矩阵,其中包含所有元素之间的所有差异,然后使用回溯解决方案。
你有一组采用和候选元素。 原来 take = [] 候选人= [1,3,7,12]
您可以选择两个元素来创建第一个区别。 然后选择满足升序要求的第三个元素。
如果你发现了一个,那么如果你没有停下来并回到可以改变所取元素的地步。
如果您达到了能够找到满足要求的解决方案的程度,那么您将继续查看搜索空间。