出于某種奇怪的原因,當我呼叫合并函式時出現分段錯誤。我正在使用 g 編譯并嘗試為引數傳遞不同的資料,但我仍然遇到這個問題。
#include <iostream>
using namespace std;
// Merges two sorted subarrays of A[].
// First sorted subarray is A[l..m].
// Second sorted subarray is A[m 1..r].
// You might want to call this function in function mergeSort().
void merge(int A[], int l, int m, int r) {
int i = 1; //Starting index for left sub array
int j = m 1; //Starting index for right sub array
int k = 1; //starting index for temp
int *temp = new int[r];
while (i <= m && j <= r) {
if (A[i] <= A[j]) {
temp[k] = A[i]; //A[i] is actually smoler than A[j]
i ;
k ;
}
else {
if (A[i] <= A[j]) {
temp[k] = A[i]; //A[j] is actually smoler than A[i]
j ;
k ;
}
}
//Copy all elements from left sbuarray to temp
while(i<=m){
temp[k] = A[i];
i ;
k ;
}
//Copy all elements from right subarray to temp
while(j<=r){
temp[k] = A[j];
i ;
k ;
}
for(int z =0; z <r; z ){
A[z] = temp[z];
}
}
}
// using mergeSort to sort sub-array A[l..r]
// l is for left index and r is right index of the
// sub-array of A[] to be sorted
void mergeSort(int A[], int l, int r) {
if (l < r) {
int middle = l (r - l) / 2;
mergeSort(A, l, middle);
mergeSort(A, middle 1, r);
merge(A, l, middle, r);
}
}
int main() {
cout << "Please enter the length (number of elements) of the input array: ";
int n;
cin >> n;
if (n <= 0) {
cout << "Illegal input array length!" << endl;
return 0;
}
int *A = new int[n];
cout << "Please enter each element in the array" << endl;
cout << "(each element must be an integer within the range of int type)."
<< endl;
for (int i = 0; i < n; i ) {
cout << "A[" << i << "] = ";
cin >> A[i];
}
cout << "Given array A[] is: ";
for (int i = 0; i < n - 1; i )
cout << A[i] << ",";
cout << A[n - 1] << endl;
mergeSort(A, 0, n - 1);
cout << "After mergeSort, sorted array A[] is: ";
for (int i = 0; i < n - 1; i )
cout << A[i] << ",";
cout << A[n - 1] << endl;
delete[] A;
return 0;
}
合并功能是我程式的問題。我試過除錯等等,但無法確定問題。
uj5u.com熱心網友回復:
嘗試使用以下代碼:-
#include<iostream>
using namespace std;
void merge(int arr[],int l,int m,int h)
{
int n1=m-l 1;
int n2=h-m;
int L[n1],M[n2];
for(int i=0;i<n1;i )
L[i]=arr[l i];
for(int i=0;i<n2;i )
M[i]=arr[m 1 i];
int i=0,j=0,k=l;
while(i<n1&&j<n2)
{
if(L[i]<=M[j])
arr[k ]=L[i ];
else
arr[k ]=M[j ];
}
while(i<n1)
arr[k ]=L[i ];
while(j<n2)
arr[k ]=M[j ];
}
void mergesort(int arr[],int l,int h)
{
if(l>=h)
return;
int m=l (h-l)/2;
mergesort(arr,l,m);
mergesort(arr,m 1,h);
merge(arr,l,m,h);
}
int main()
{
int n;
cout<<"Enter the no of element to be sorted:- ";
cin>>n;
int arr[1000000];
for(int i=0;i<n;i )
arr[i]=rand();
mergesort(arr,0,n-1);
for(int i=0;i<n;i )
cout<<arr[i]<<endl;
}
這是在線編譯器的輸出:-

uj5u.com熱心網友回復:
問題出在這段代碼中。
while (j <= r) {
temp[k] = A[j];
i ; // Here it should be j instead of i
k ;
}
你在遞增,i而你應該遞增j。盡管如此,這仍然會產生錯誤的輸出。
使用除錯器找出您的代碼有什么問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333885.html
