我来自python,正在尝试学习C,但是直到昨天我才开始使用该指针。我写了一个倒排的排序算法,该算法应该采用未排序的数组,然后在每个遍次中选择最高和最低的元素,将它们放在每一端,然后递归地执行相同的操作,而忽略已排序的元素。问题是我总是会遇到一些我无法解决的关于指针类型的错误(不同的错误取决于我尝试更改的内容)。你们可以帮忙吗?
#include <stdio.h>
void inv_cocksort(int *arr[], int first, int last);
int main(void)
{
int unsorted[11] = {3, 1, 4, 5, 4, 2, 6, 9, 2, 8, 7};
int unsorted_length = 11;
for (int i = 0; i < unsorted_length; i++)
{
printf("%i", unsorted[i]);
}
inv_cocksort(&unsorted, 0, unsorted_length-1);
for (int i = 0; i < unsorted_length; i++)
{
printf("%i", unsorted[i]);
}
void inv_cocksort(int *arr[], int first, int last)
{
if (first > last)
{
return;
}
else
{
for (int i = 0; i < last-1; i++)
{
if (arr[i] < arr[last])
{
int temp = *arr[last];
*arr[i] = *arr[last];
*arr[last] = temp;
}
if (arr[i] > arr[first])
{
int temp2 = *arr[first];
*arr[i] = *arr[first];
*arr[last] = temp2;
}
}
inv_cocksort(&arr[], first+1, last-1)
}
}
答案 0 :(得分:1)
我认为您需要更改
for (int i = 0; i < last-1; i++)
到
for (int i = first+1; i < last-1; i++)
或类似的
答案 1 :(得分:1)
有很多问题:
您想要这个:
#include <stdio.h>
void inv_cocksort(int arr[], int first, int last)
{
if (first > last)
{
return;
}
else
{
for (int i = 0; i < last - 1; i++)
{
if (arr[i] < arr[last])
{
int temp = arr[last];
arr[i] = arr[last];
arr[last] = temp;
}
if (arr[i] > arr[first])
{
int temp2 = arr[first];
arr[i] = arr[first];
arr[last] = temp2;
}
}
inv_cocksort(arr, first + 1, last - 1);
}
}
int main(void)
{
int unsorted[11] = { 3, 1, 4, 5, 4, 2, 6, 9, 2, 8, 7 };
int unsorted_length = 11;
for (int i = 0; i < unsorted_length; i++)
{
printf("%i ", unsorted[i]);
}
inv_cocksort(unsorted, 0, unsorted_length - 1);
for (int i = 0; i < unsorted_length; i++)
{
printf("%i ", unsorted[i]);
}
}
该编译至少在没有警告的情况下进行,但是无法正常工作。
答案 2 :(得分:0)
解决了。
我首先添加了一堆开始和&s,因为我担心该函数将只接收传递的值的副本,一旦堆栈内存不再分配给该副本,则该副本将丢失并丢失。事实证明,即使数组不是字符串,数组名称实际上也可以用作指向第一个值的指针,因此我根本不需要操纵任何内存。
还修正了逻辑,很抱歉一开始上传这样的错误代码。
cocksort是因为它是鸡尾酒搅拌器,不是,但是也许呢? idk。
#include <stdio.h>
void inv_cocksort(int arr[], int first, int last);
int main(void)
{
int unsorted[11] = {3, 1, 4, 5, 4, 2, 6, 9, 2, 8, 7};
int unsorted_length = 11;
for (int i = 0; i < unsorted_length; i++)
{
printf("%i", unsorted[i]);
}
printf("\n");
inv_cocksort(unsorted, 0, unsorted_length-1);
for (int j = 0; j < unsorted_length; j++)
{
printf("%i", unsorted[j]);
}
}
void inv_cocksort(int arr[], int first, int last)
{
if (first > last)
{
return;
}
else
{
for (int i = first; i <= last; i++)
{
if (arr[i] < arr[last])
{
int temp = arr[last];
arr[last] = arr[i];
arr[i] = temp;
}
if (arr[i] > arr[first])
{
int temp2 = arr[first];
arr[first] = arr[i];
arr[i] = temp2;
}
}
inv_cocksort(arr, first+1, last-1);
}
}