C++ 多种元素的排序
我做了一个自然的合并排序方法。我读取一个充满整数的文件,然后执行基数排序方法。然后显示结果。出于某种原因,它可以完美地处理多达5000个数字的文件,但当我尝试更高的文件时,它似乎正在加载,什么也没有发生,然后我只需按任意键继续消息。有人知道为什么会这样吗C++ 多种元素的排序,c++,C++,我做了一个自然的合并排序方法。我读取一个充满整数的文件,然后执行基数排序方法。然后显示结果。出于某种原因,它可以完美地处理多达5000个数字的文件,但当我尝试更高的文件时,它似乎正在加载,什么也没有发生,然后我只需按任意键继续消息。有人知道为什么会这样吗 int main() { bool result = false; int chose; string fileName,text; fstream inText; int sizeOf = 0;
int main()
{
bool result = false;
int chose;
string fileName,text;
fstream inText;
int sizeOf = 0;
COMPARE_COUNT = 0;
SWAP_COUNT = 0;
cout << "Please Enter An Input File Name: ";
getline(cin, fileName);
inText.open(fileName.c_str() , fstream::in);
if(!inText)
{
cout << "Could Not Open " << fileName << " File" << endl;
exit(EXIT_FAILURE);
}
else
{
inText >> sizeOf;
int * myArray = new int[sizeOf];
for(int i = 0; i < sizeOf; i++)
{
inText >> myArray[i];
}
//Merge Sort
int *copyArray2 = new int[sizeOf];
cout << "Merge Sort" << endl;
displayArray(copyArray2,sizeOf);
cout << "Number Of Swaps: " << SWAP_COUNT << endl;
cout << "Number Of Comparisons: " << COMPARE_COUNT << endl;
cout << endl;
SWAP_COUNT = 0;
COMPARE_COUNT = 0;
}
}
return 0;
}
intmain()
{
布尔结果=假;
int选择;
字符串文件名,文本;
fstream-inText;
int-sizeOf=0;
比较计数=0;
交换计数=0;
我的猜测可能是,程序内存不足,出现异常时崩溃。您有很多次调用new
,但看不到delete
。您完全正确,我认为会在方法末尾插入delete c/我的猜测是,程序内存不足,出现异常时崩溃。您有有几次调用new
,但是看不到delete
。你完全正确,我想应该在方法的末尾插入delete c/
void mergeForNS(int *a, int size, int low, int high, int mid)
{
int i, j, k;
int *c = new int[size];
i = low;
k = low;
j = mid + 1;
while (i <= mid && j <= high)
{
if (a[i] < a[j])
{
c[k] = a[i];
k++;
i++;
}
else
{
c[k] = a[j];
k++;
j++;
}
}
while (i <= mid)
{
c[k] = a[i];
k++;
i++;
}
while (j <= high)
{
c[k] = a[j];
k++;
j++;
}
for (i = low; i < k; i++)
{
a[i] = c[i];
}
}
void mergeSort(int values[], int n,bool result)
{
for(int i = 1; i < n; i = i + i )//i *= 2)
{
for(int low = 0; low < n - i; low += i + i )//i*2)
{
mergeForNS(values,n,low,std::min(low+i+i-1,n-1),low+i-1);//s-1
}
}
}