quickSort 分段错误(核心已转储)
quickSort segmentation fault (core dumped)
我知道我的问题有多个答案,我明白为什么会这样,但我的主要问题是如何克服这个错误。我知道我正在尝试访问我无权访问的内存,但我只是不知道我是怎么做到的。
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int arr[] = {4,5,2,1,3};
int lengd = sizeof(arr)/sizeof(arr[0]);
void swapNumber(int arr[], int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void partition(int arr[], int i, int j){
int pivot = arr[j];
while (i <= j) {
while (arr[i] < pivot){
i++;
}
while (arr[j] > pivot){
j--;
}
if (i <= j) {
swapNumber(arr, i, j);
i++;
j--;
}
}
}
void quickSort(int arr[], int left, int right) {
int i = left;
int j = right;
partition(arr,left,right);
if (left < j){
quickSort(arr,left, j);
}
if (i < right){
quickSort(arr, i, right);
}
}
int main(){
quickSort(arr,0, lengd-1);
for(int i = 0; i < 5; i++){
cout << arr[i] << endl;
}
}
当我在quickSort函数中运行调用quickSort函数时出现错误。我不知道该怎么做。
由于您的号码不会在您的 partition
函数中被修改,您应该更改其签名以接收 reference:
void partition(int arr[], int& i, int& j)
一切都会正常进行。
使用调试器或适当放置的控制台消息很容易发现此类缺陷!
我知道我的问题有多个答案,我明白为什么会这样,但我的主要问题是如何克服这个错误。我知道我正在尝试访问我无权访问的内存,但我只是不知道我是怎么做到的。
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int arr[] = {4,5,2,1,3};
int lengd = sizeof(arr)/sizeof(arr[0]);
void swapNumber(int arr[], int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void partition(int arr[], int i, int j){
int pivot = arr[j];
while (i <= j) {
while (arr[i] < pivot){
i++;
}
while (arr[j] > pivot){
j--;
}
if (i <= j) {
swapNumber(arr, i, j);
i++;
j--;
}
}
}
void quickSort(int arr[], int left, int right) {
int i = left;
int j = right;
partition(arr,left,right);
if (left < j){
quickSort(arr,left, j);
}
if (i < right){
quickSort(arr, i, right);
}
}
int main(){
quickSort(arr,0, lengd-1);
for(int i = 0; i < 5; i++){
cout << arr[i] << endl;
}
}
当我在quickSort函数中运行调用quickSort函数时出现错误。我不知道该怎么做。
由于您的号码不会在您的 partition
函数中被修改,您应该更改其签名以接收 reference:
void partition(int arr[], int& i, int& j)
一切都会正常进行。
使用调试器或适当放置的控制台消息很容易发现此类缺陷!