fishfish_ 2022-07-02 16:30 采纳率: 75%
浏览 59
已结题

快速排序算法有问题,怎么解决?

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Cutoff 10
typedef int ElementType;
/交换地址的函数/
void Swap(ElementType a, ElementTypeb){
ElementType *c;
c=*a;
*a=*b;
b=c;
}
/下面的是插入排序,当数组元素个数不多时用插入排序/
void InsertionSort(ElementType A[],int N){
int p,i;
ElementType Tmp;
for(p=1;p<N;p++){
Tmp=A[p];
for(i=p;i>0&&A[i-1]>Tmp;i--){
A[i]=A[i-1];
}A[i]=Tmp;
}
}
/下面的找基准,提高快速排序的效率/
ElementType Median3( ElementType A[], int Left, int Right )
{
int Center = (Left+Right) / 2;
if ( A[Left] > A[Center] )
Swap( &A[Left], &A[Center] );
if ( A[Left] > A[Right] )
Swap( &A[Left], &A[Right] );
if ( A[Center] > A[Right] )
Swap( &A[Center], &A[Right] );
Swap( &A[Center], &A[Right-1] );
return A[Right-1]; /
返回基准Pivot /
}
/下面是快速排序主要程序,采用递归的形式/
void Qsort( ElementType A[], int Left, int Right )
{ /
核心递归函数 /
int Pivot, Low, High;
if ( Cutoff <= Right-Left ) { /* 如果序列元素充分多,进入快排 */
Pivot = Median3( A, Left, Right ); /* 选基准 */
Low = Left; High = Right-1;
while (1) { /*将序列中比基准小的移到基准左边,大的移到右边*/
while ( A[++Low] < Pivot ) ;
while ( A[--High] > Pivot ) ;
if ( Low < High ) Swap( &A[Low], &A[High] );
else break;
}
Swap( &A[Low], &A[Right-1] ); /
将基准换到正确的位置 /
Qsort( A, Left, Low-1 ); /
递归解决左边 /
Qsort( A, Low+1, Right ); /
递归解决右边 /
}
else InsertionSort( A+Left, Right-Left+1 ); /
元素太少,用简单插入排序 */
}
int main(){
int i,n;
scanf("%d",&n);
int A[n];
for(i=0;i<n;i++){
scanf("%d",&A[i]);
}
for(i=0;i<n;i++){
printf(" %4d",A[i]);
}
printf("\n");
Qsort(A,0,n-1);
for(i=0;i<n+10;i++){
printf(" %4d",A[i]);
}}

img

  • 写回答

2条回答 默认 最新

  • fuill 2022-07-02 16:45
    关注

    输出的时候应该是

    for(i=0;i<n;i++)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月2日
  • 已采纳回答 7月2日
  • 创建了问题 7月2日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效