grn*_*cds 0 c++ arrays mergesort pointers
这就是下面合并排序的实现。但是,我不明白这段代码是如何工作的。我们不使用指针,并且 中不会返回任何内容main()。那么,它是如何操纵的呢myarray?谁能解释一下吗?
这是代码:
#include <iostream>
using namespace std;
void merge(int arr[], int l, int m, int r) {
int i = l;
int j = m + 1;
int k = l;
/* create temp array */
int temp[5];
while (i <= m && j <= r) {
if (arr[i] <= arr[j]) {
temp[k] = arr[i];
i++;
k++;
} else {
temp[k] = arr[j];
j++;
k++;
}
}
/* Copy the remaining elements of first half, if there are any */
while (i <= m) {
temp[k] = arr[i];
i++;
k++;
}
/* Copy the remaining elements of second half, if there are any */
while (j <= r) {
temp[k] = arr[j];
j++;
k++;
}
/* Copy the temp array to original array */
for (int p = l; p <= r; p++) {
arr[p] = temp[p];
}
}
Run Code Online (Sandbox Code Playgroud)
合并排序函数:
/* l is for left index and r is right index of the
sub-array of arr to be sorted */
void mergeSort(int arr[], int l, int r) {
if (l < r) {
// find midpoint
int m = (l + r) / 2;
// recursive mergesort first and second halves
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
// merge
merge(arr, l, m, r);
}
}
Run Code Online (Sandbox Code Playgroud)
主功能:
int main() {
int myarray[5];
//int arr_size = sizeof(myarray)/sizeof(myarray[0]);
int arr_size = 5;
cout << "Enter 5 integers in any order: " << endl;
for (int i = 0; i < 5; i++) {
cin >> myarray[i];
}
cout << "Before Sorting" << endl;
for (int i = 0; i < 5; i++) {
cout << myarray[i] << " ";
}
cout << endl;
mergeSort(myarray, 0, (arr_size - 1)); // mergesort(arr,left,right) called
cout << "After Sorting" << endl;
for (int i = 0; i < 5; i++) {
cout << myarray[i] << " ";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序使用了 C++ 的两个不起眼的功能,这些功能是从 C 获得的,以实现向后兼容性。
mergeSort(myarray, ...)与 相同mergeSort(&myarray[0], ...)。void mergeSort(int arr[], ...)ever”是什么意思呢?就像在 C 中一样,array-of-something类型的函数参数被调整为point-to-something。所以这个函数和void mergeSort(int* arr, ...)所以这个程序毕竟确实使用了指针,它们只是被薄薄地掩盖了。
上述功能对于处理 C 风格数组至关重要。C++ 有 C 风格数组的替代方案,即std::array和std::vector,在大多数情况下通常推荐使用它们。请注意,为了获得与程序中相同的行为,通常通过引用传递这些容器。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |