C语言:快速排序5个元素,但不排序10个元素
我不明白为什么代码只对5个元素排序,而不对10个元素排序。在我与教授进行办公室访问期间,我向我介绍了这种方法。所以我按照他的指示编写代码。有人能帮我解决这个问题吗?我的代码可以工作,但在更大的数组上无法工作。我知道现在已经太晚了,没有人可以在到期之前提供帮助,但我只想了解我在这段代码中做了什么 多谢各位C语言:快速排序5个元素,但不排序10个元素,c,arrays,sorting,quicksort,C,Arrays,Sorting,Quicksort,我不明白为什么代码只对5个元素排序,而不对10个元素排序。在我与教授进行办公室访问期间,我向我介绍了这种方法。所以我按照他的指示编写代码。有人能帮我解决这个问题吗?我的代码可以工作,但在更大的数组上无法工作。我知道现在已经太晚了,没有人可以在到期之前提供帮助,但我只想了解我在这段代码中做了什么 多谢各位 /* Homework3.c Qucksort arrays Jared DaRocha 3/1/2020 */ #include <stdio.h>// preproces
/* Homework3.c
Qucksort arrays
Jared DaRocha
3/1/2020
*/
#include <stdio.h>// preprocessor
int partition(int arr[], int first, int end);// function declaration
void quickSort(int arr[], int first, int end);// function declaration
int main(void)// beginning of main
{
//Data
int array[5];// creates an array of 5 elements
int size = sizeof(array) / sizeof(array[0]); // calculates size of the array
// prompt user to input data to input int the array
printf("Enter 5 numbers to add in the array");
// prompts user to input 10 numbers
for(int i =0;i<size; i++)
{
scanf("%d", &array[i]);// stores user-defined data into the array
}
// call the function to sort the array
quickSort(array, 0, size -1);
// prints array
for (int i = 0; i < size; i++)
{
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
int partition(int arr[], int low, int high)// Function declaration
{
//Data
int partition = arr[low]; // partition number
// infinite for loop
for (;;)
{
// decrement high while partition is smaller than element of high
while(partition <arr[high])
{
high--;
}
// if partition is greater than element of high, swap high with low element since low element is the pivot
if(partition > arr[high]){
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
low++;
}
// increment low while partition is greater than element of low
while(partition > arr[low])
{
low++;
}
// swap low and next element in the right if partition is less than element of low
if(partition < arr[low])
{
int temp = arr[low];
arr[low] = arr[low+1];
arr[low+1] = temp;
}
// if low is same as high then exit loop
if(high == low)
{
break;
}
}
return low;
}
void quickSort(int arr[], int first, int end) // function definition
{
if (first < end)
{
int partitionIndex = partition(arr, first, end);
quickSort(arr, first, (partitionIndex - 1));
quickSort(arr, (partitionIndex+1 ), end);
}
}
`如果您检查快速排序算法,您将发现数组如何划分为两个不重叠的部分,但也不会留下一个元素。这样做,就在两个切片之间,只留下一个元素。将数组分成两个片和一个不参与对其他片的递归调用的数组元素。。。。这是不正确的。您知道的是,下位片的所有元素都小于标记,其余元素大于或等于标记。。。但分割点可以是对应的数组子部分的任何元素 顺便说一下,代码或分区是完全不正确的。您首先选择一个元素作为标记,您可以选择它作为数组的任何元素或作为所有元素的平均值,这并不重要。。。你不会把它放到数组中。然后从数组下的结束元素开始搜索,从令牌上的开始元素开始搜索,一旦有一对这样的元素,就切换它们,但将找到的元素与令牌交换,这不仅没有达到预期的效果,但是引入了令牌的副本并更改了它的值,这将破坏您的数组
您没有搜索数组元素。。。您正在搜索要分割数组的相邻元素之间的位置,子数组将从beg到pos-1,从pos到end,或从beg到pos,然后从pos+1到end,但不要忽略中心元素,因为您知道它属于一个数组,但是不需要标记。这是应该能够对10个元素进行排序的代码还是原始的5元素版本?不清楚,因为它同时引用了5和10。显示的代码在多个地方有5作为幻数。请显示用于排序10的代码。如果这段代码在排序除5以外的任何其他数字时遇到问题,我并不感到惊讶,并将要求得到答案。我用10个元素对其进行了测试,并决定用5个元素进行测试。我忘了更改评论。我做了更多的测试,发现它只对奇数排序,对偶数不起作用