回复 28楼 lin5161678
对于 a[10]={10,9,8,7,6,5,4,3,2,1};用你的方法来判断,还是45次,并且代码中的 if(mask) break;根本不起作用,看来对于这个数列,用冒泡法来判断和交换都始终是45次了。
#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 ]={10,9,8,7,6,5,4,3,2,1}; // srand( ( unsigned long )time( NULL ) ); /* for( int i = 0; i < 10; ++i ) { a[ i ] = rand() % 1000; printf( "%d ",a[ i ] ); }*/ printf( "\n" ); sort( a, 0, 10 ); for( int i = 0; i < 10; ++i ) printf( "%d ", a[ i ] ); return 0; } void sort( E_T *array, int l, int r ) { int minix, maxix; int R; int c; c=0; for( ; l < r; ++l, --r ) { for( minix = l + 1, maxix = r - 2, R = r - 1; minix <= R; ++minix, --maxix ) { if( array[ l ] > array[ minix ] ) { c++; E_T temp = array[ l ]; array[ l ] = array[ minix ]; array[ minix ] = temp; } if( array[ R ] < array[ maxix ] ) { c++; E_T temp = array[ R ]; array[ R ] = array[ maxix ]; array[ maxix ] = temp; } } } printf("jiao huan %d ci",c); }
[此贴子已经被作者于2018-5-23 22:22编辑过]
[此贴子已经被作者于2018-5-24 11:45编辑过]