我是一个新手 C 程序员,并且一直在研究这个算法很长时间。我非常沮丧,因为我无法获得正确的非递减排序序列。
欢迎所有帮助。提前致谢。
这是我的代码:
#include <stdio.h>
#include <conio.h>
int swap(short* a, short fst , short scnd){
short temp = a[fst] ;
a[fst] = a[scnd] ;
a[scnd] = temp ;
return 0 ;
}
int div(short* a ,short p,short middle ,short r){
while( p < r ){
if( p < middle ){
if( a[p] > a[middle] ){
swap(a ,p ,middle) ;
}
p++ ;
}
if( middle < r ){
if( a[middle] > a[r] ){
swap(a ,middle , r) ;
}
r-- ;
}
}
return 0 ;
}
int fast(short* a , short p , short r){
if( p < r){
int middle = (p+r)/2 ;
div(a, p, middle ,r ) ;
fast(a, p ,middle-1 ) ;
fast(a ,middle+1 ,r);
}
}
int main(){
short n ,i ;
scanf("%hd",&n);
short a[n+1] ;
for(i=1 ; i<=n ; i++ ){
scanf("%hd",&a[i]);
}
fast(a ,1 ,n ) ;
i=1;
while(i<=n){
printf("%hd " , a[i]);
i++ ;
}
getch() ;
return 0 ;
}