「データ構造」の練習レベル-発泡体の並べ替え

2702 ワード

泡の並べ替え:
/*  
================================================  
   :      
   :    (        )、         
================================================  
*/  
/*  
====================================================  
        :  
  
          ,                ,    
                   ,        ,   
      。 :                       
     ,      。  
    
             ,                  
   k,               。  
  
         。       O(n2)--[n   ]  
=====================================================  
*/  
  
void bubble_sort(int *x, int n)  
{  
 int j, k, h, t;  
     
 for (h=n-1; h>0; h=k) /*         */  
 {  
  for (j=0, k=0; j<h; j++) /*    k=0,       k*/  
  {  
  if (*(x+j) > *(x+j+1)) /*      ,      */  
  {  
  t = *(x+j);  
  *(x+j) = *(x+j+1);  
  *(x+j+1) = t; /*    */  
  k = j; /*         。  k           。*/  
  }  
  }  
 }  
}  
例:
//           10         ,          ,      
//         10  
#include "stdio.h"
#define N 10 

int main() {

	int i, j, temp;
	int a[N+1];
	int count = 0;//    ,        

	printf( " Please enter %d date: 
", N ); for (i = 1; i <= N; i++) scanf( " %d", &a[i]); printf( "************************
"); for (i = 1; i <= N; i++) { count++;// , 1 for ( j=1; j<=N; j++) {//         if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } // printf( "%3d:", count); for (j = 1; j <= N; j++) printf( "%d ",a[j]); printf( "
"); } // printf( " The result is :"); for (i = 1; i <= 10; i++); printf( "%d",a[i]); return 0; }
改善された泡の並べ替え:
//      flag,             ,       ,    ,        :

#include "stdio.h"
#define N 10 

int main() {

	int i,j,temp;
	int a[N+1];
	int count=0;
	int flag;

	printf( " Please enter %d date: 
", N ); for( i=1; i<=N; i++) scanf( " %d", &a[i]); printf( "************************
"); flag=1;// for( i=1; i<=N&&flag; i++) { flag=0; for( j=1; j<=N; j++) { if(a[j]>a[j+1]) { flag=1;// temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } if(flag) {// ? count++; printf( "%3d:", count); for( j=1; j<=N; j++) printf( "%d ",a[j]); printf( "
"); } } // printf( " The result is :"); for( i=1; i<=10; i++); printf( "%d
",a[i]); return 0; }
プログラミングスタイル思考:1、入出力の人間性化.良いヒント、エラーメッセージ…
2、方法の拡張性?カスタム配列(データの数、タイプ)の並べ替え
3、試験用例