回复 20楼 九转星河
为啥我一次都没奔溃。你把后缀改成.c。
貌似有个地方越界了
[此贴子已经被作者于2018-5-25 15:42编辑过]
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
#include <stdio.h> #include <time.h> #include <stdlib.h> typedef int E_T; void sort( E_T *array, int l, int r ); int main( void ) { E_T a[ 10 ]; srand( ( unsigned long )time( NULL ) ); for( int i = 9; i >=0; i-- ) { a[ i ] = i;//只改了这儿赋值。 printf( "%d ",a[ i ] ); } printf( "\n" ); sort( a, 0, 10 ); for( int i = 0; i < 10; ++i ) printf( "%d ", a[ i ] ); printf( "\n" ); printf( "\n" ); printf( "\n" ); return 0; } void sort( E_T *array, int l, int r ) { int minix, maxix; int R; int c; // int f; int s; s = 0; if( l >= r ) return; for( int ix = l; ix < r -1; ix++ ) { if( array[ ix ] <= array[ ix + 1 ] ) { s++; if( s <= 0 ) break; } else if( array[ ix ] > array[ix + 1 ] ) { s--; if( s >= 0 ) break; } else break; } c=0; if( s == r - l - 1 ) { printf("jiao huan %d ci\n",c); return; } else if( s == l - r + 1) { for(r -= 1 ; l < r; l++,r-- ) { c++; E_T temp = array[ l ]; array[ l ] = array[ r ]; array[ r ] = temp; } } else { for( ; l < r; ++l, --r ) { // f = 0; for( minix = l + 1, maxix = r - 2, R = r - 1; minix <= R; ++minix, --maxix ) { if( array[ l ] > array[ minix ] ) { c++; // f++; E_T temp = array[ l ]; array[ l ] = array[ minix ]; array[ minix ] = temp; } if( array[ R ] < array[ maxix ] ) { c++; // f++; E_T temp = array[ R ]; array[ R ] = array[ maxix ]; array[ maxix ] = temp; } } /* if( f == 0 ) sort( array, l + 1, r - 1 );*/ } } printf("jiao huan %d ci\n",c); }