小单同学shan 2022-01-25 14:31 采纳率: 100%
浏览 31
已结题

c快速排序写完数据不对,请帮我看看哪里出问题了

问题遇到的现象和发生背景

快速排序

问题相关代码,请勿粘贴截图

```c++
//快速排序
#include<iostream>
#include<cstdio>
using namespace std;


 int partition(int arr[],int p,int r){//分割扫描 
    int pivot=arr[p];
    int sp=p+1;             //扫描指针 
    int bigger=r;           //右侧固定指针
    while(sp<=bigger){
        if(arr[sp]<=pivot){
            sp++;
        }else {
            swap(arr[sp],arr[bigger]);
            bigger--;
        }
    }
    swap(arr[p],arr[bigger]); 
    return bigger;
}

 void quicksort(int arr[],int p,int r)//快速排序 递归
{
 if(p<r)
 {
 int q=partition(arr,p,r);
 partition(arr,p,q-1);
 partition(arr,q+1,r);
}
 } 

int main()
{
 
 int arr[]={9,15,27,11,100};

 int len=sizeof(arr)/sizeof(arr[0]);
  

 quicksort(arr,0,len-1);
 for(int i=0;i<len;i++){
     printf("%d,",arr[i]);
 }
 
 return 0;
 
 } 

```

运行结果及报错内容

他会把9替换成0???
结果是0.5.11.27.100

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • Dana_ranmo 2022-01-25 17:36
    关注

    你29行貌似会有q-1<p的情况,试试在partition函数里面加一个判断,p<r再执行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。