这里是代码!
#include <iostream>
#include <cstdio>
using namespace std;
//mod-位置交换
void swap(int * a,int * b){
int temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
//mod-数组输出
void out(int * arr,int num){
for(int i=0;i < num;i++){
cout<<arr[i];
}
cout<<endl;
return;
}
//快速排序函数
void change(int * arr,int left,int right){
if(left == right){
return;
}
int l = left+1,r = right;
int num = arr[left];
while(l != r){
while(arr[r] >= num)r--;
while(arr[l] <= num && l < r)l++;
if(r != l){
swap(&(arr[r]),&(arr[l]));
}
else{
swap(&(arr[r]),&(arr[left]));
}
}
change(arr,0,r);
change(arr,r,right);
return;
}
int main(){
//输入数据个数
int num;
scanf("%d",&num);
//输入数组arr
int arr[num];
for(int i=0;i < num;i++){
scanf("%d",&arr[i]);
}
//排序
change(arr,0,num-1);
//输出
out(arr,num);
return 0;
}
可能是你22行的for循环的循环条件不满足(也就是说num或arr有问题),所以无法执行输出i的代码。
去检查arr和num吧
若有帮助,还望采纳
这该死的算法
没错,你可以用优先队列或sort
改好啦,新的代码如下
#include <iostream>
#include <cstdio>
using namespace std;
//mod-位置交换
void swap(int * a,int * b){
int temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
//mod-数组输出
void out(int * arr,int num){
for(int i=0;i < num;i++){
printf("%d ",arr[i]);
}
cout<<endl;
return;
}
//快速排序函数
void quickSort(int * arr,int left,int right){
if(right - left <= 1){
if(right - left == 1){
if(arr[right] < arr[left]){
swap(&arr[right],&arr[left]);
}
}
//printf("退出递归\n");
return;
}
else{
//printf("进行循环\n");
int l = left+1,r = right;
int num = arr[left];
while(l < r){
while(arr[r] >= num && l < r)r--;
while(arr[l] <= num && l < r)l++;
if(r != l){
swap(&(arr[r]),&(arr[l]));
//printf("交换\n");
}
else{
swap(&(arr[r]),&(arr[left]));
//printf("基准被交换\n");
}
}
//printf("进入递归\n");
quickSort(arr,0,r);
quickSort(arr,r,right);
return;
}
}
int main(){
//输入数据个数
int num;
scanf("%d",&num);
//输入数组arr
int arr[num];
for(int i=0;i < num;i++){
scanf("%d",&arr[i]);
}
//排序
quickSort(arr,0,num-1);
//输出
out(arr,num);
return 0;
}