代碼如下,問題是當創建陣列過大,比如100000時,第一次排序正常,第二次繼續排有序的陣列時就會出錯怎么回事呢?陣列小時排幾次也不會出錯,求大神指點
#include<stdio.h>
#include<stdlib.h>
void Quick(long num[], int low, int high) {//快速排序
long pivotkey;
int l, h;
l = low;
h = high;
pivotkey = num[low];//用第一個元素作為樞紐
while (l<h){
while (num[h] >= pivotkey&&l<h) h--; //從左到右找比樞紐pivotkey小的元素
num[l] = num[h];
while (num[l] <= pivotkey&&h>l) l++; // 從右到左找比pivotkey大的元素
num[h] = num[l];
}
num[l] = pivotkey;
if (low != l)
Quick(num, low, l - 1);//遞回對剩下的序列進行快速排序
if (high != l)
Quick(num, l + 1, high);
}
int main(){
long *num;
int n;
printf("輸入陣列長度:\n");
scanf("%d",&n);
num=(long *)malloc(n*sizeof(long));
int i = 0;
for (i; i<n; i++)
num[i] = rand() % 1000 + 1;//隨機生成1-1000的數
printf("生成陣列完畢\n\n\n");
int flag=1;
while(flag){
Quick(num,0,n-1);
flag=0;
printf("排序完畢\n");
printf("繼續排序請輸入1\n");
scanf("%d",&flag);
if(flag!=1)
flag=0;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84640.html
標籤:基礎類
上一篇:c++改錯問題,求解!
