C++排序数组递归
C++ Sorting Array Recursion
我正在创建一个小程序,该程序应该按升序对数组中的整数进行排序,但我非常拘泥于应该使用的算法。我不能遍历数组,必须使用递归函数。我被允许有一个辅助函数,可以找到数组中最小的索引,我已经成功地做到了,但我最难弄清楚如何在递归函数中使用该函数对数组进行排序。这是我到目前为止的代码,我知道我的sortIntegers功能太差了
int main()
{
int numbers[] = {8, 2, 5, 1, 3};
sortingIntegers(numbers, 5);
return 0;
}
void sortingIntegers(int *list, int size) {
if (size == 1) {
for (int i = 0; i < size; i++) {
cout << list[i] << ", ";
}
} else {
for (int z = 0; z < size; z++) {
if (list[size - 1] == smallestIndex(list)) {
for (int y = 0; y < size; y++) {
swap(list[z], list[y]);
}
}
}
sortingIntegers(list, size - 1);
}
}
int smallestIndex(int *array) {
int smallest = array[0];
for (int i = 1; i < sizeof(array); i++) {
if (array[i] < smallest) {
smallest = array[i];
}
}
return smallest;
}
int main()
{
int numbers[] = {8, 2, 5, 1, 0};
sortingIntegers(numbers, 0, 5);
for (int i=0;i<5;i++)
cout << numbers[i] << ' ';
return 0;
}
void sortingIntegers(int *list, int left, int size) {
if (left == size)
return;
int smallest = smallestIndex(list, left, size);
int c = list[smallest];
list[smallest] = list[left];
list[left] = c;
sortingIntegers(list, left+1 ,size);
}
int smallestIndex(int *array, int left, int size) {
int smallest = array[left];
int smIndex = left;
for (int i = left+1; i < size; i++) {
if (array[i] < smallest) {
smallest = array[i];
smIndex = i;
}
}
return smIndex;
}
这是我基于你的解决方案。首先,sizeof(array)
返回指针的大小。其次,我返回最小项的索引,而不是它的值,然后将它和列表中的第一个元素交换。然后我调用从另一个元素(left
参数)开始的列表的排序,因为我知道直到left-1
的列表已经排序了。
一个完全递归的解决方案:
要对数组进行排序,请找到最小的元素并将其交换到第一个位置。然后对数组的其余部分进行排序,直到只剩下一个元素为止。
要找到数组中最小的元素,请取数组其余部分中-第一个元素和-最小元素中的最小元素,直到只剩下一个元素。
int SmallestIndex(int Array[], int From, int To)
{
if (From == To-1)
return From; // Single element left
// Index of the smallest in the rest
int Index= SmallestIndex(Array, From + 1, To);
// Index of the smallest
return Array[From] < Array[Index] ? From : Index;
}
void Sort(int Array[], int From, int To)
{
if (From == To-1)
return; // Single element left
// Locate the smallest element
int Index= SmallestIndex(Array, From, To);
// Swap it to the first place
int Swap= Array[Index]; Array[Index]= Array[From]; Array[From]= Swap;
// Sort the rest
Sort(Array, From + 1, To);
}
用(Array, 0, N)
调用Sort
。
您可以使用此代码段使用递归对数组进行排序。如果你的数组长度是N递归排序N-1长度的数组,并且你只需要对一个N元素进行排序,或者你可以说是最后一个元素,你就不难这样想了。我给你举一个例子,假设你必须对这个数组进行排序=[50,40,10,30,20],如果递归给你一个数组=[10,30,40,50,20]这个数组,你只需要把20放在正确的位置就可以对数组进行排序。
private static void sort(int[] array, int length) {
if (length == 1) return;
sort(array, length - 1);
var lastIndex = length - 1;
for (int index = lastIndex; index > 0; index --){
if (array[index] < array[index - 1]){
int temp = array[index];
array[index] = array[index - 1];
array[index - 1] = temp;
}
}
}
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 数组元素打印的递归方法
- 使用递归模板动态分配的多维数组
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 使用递归输出数组
- 使用递归反转和打印出数组的内容
- 递归二进制搜索与字符串数组
- 将数组传递给递归函数,同时C++修改它
- 使用递归的序列到达数组末尾的最小跳转次数
- 尝试递归获取数组元素的总和
- 递归数独求解器 不正确的解决方案 (C++)
- 类递归数组
- 链表递归和数组
- 如何递归元组
- 递归数独求解器几乎可以工作,但空网格的堆栈溢出
- 修复递归数组
- 使用递归对数组进行排序
- c++递归数组解释
- 递归数组程序中的小问题