Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239437
  • 博文数量: 37
  • 博客积分: 2259
  • 博客等级: 大尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 00:08
文章分类

全部博文(37)

文章存档

2009年(17)

2008年(20)

我的朋友

分类: C/C++

2008-12-08 16:18:10

#include
#include
#define N  10
 
void initArr(int a[] );
int  findKey(int a[], int key);
void print( int  a[] );
void quickSort( int a[] );
void doQuickSort( int a[], int left, int right );
void bubbleSort( int a[] );
void swap( int *a, int *b);
void insertSort( int a[] );
void shellSort( int a[] );
void doShellSort( int a[], int dk );
void selectSort( int a[] );
int  selectMinKey( int a[], int beginIndex );
int  main(void){
 int a[N] = {-1};
 initArr(a);
 print(a);
 selectSort(a);
 print(a);
  
}
int  selectMinKey( int a[], int beginIndex ){
 int minValue = a[beginIndex];
 int retIndex = beginIndex;
 int i = 0;
 for( i = beginIndex+1; i < N; i++ )
  if( a[i] < minValue ){
   minValue = a[i];
   retIndex = i;
  }
 return retIndex;
}
void selectSort( int a[] ){
 int i = 0;
 int j = 0;
 for( i = 0; i < N; i++ ){
  j = selectMinKey( a, i );
  if( i != j )
   swap( &a[i], &a[j] );
 }
}
void shellSort( int a[] ){
 int delta[3] = {1,3,5};
 int i = 0;
 for( i = 0; i < 3; i++ )
  doShellSort( a, delta[i] );
}
void doShellSort( int a[], int dk ){
 int i = 0;
 int j = 0;
 int temp = 0;
 for( i = 1+dk; i < N; i++ ){
  temp = a[i];
  for( j = i-dk; a[j] > temp && j >=0; j -= dk )
       a[j+dk] = a[j];
  a[j+dk] = temp;
 }
}

void insertSort( int a[] ){
 int i = 0;
 int j = 0;
 int temp = 0;
 for( i = 1; i < N; i++ ){
  temp = a[i];
  for( j = i-1; a[j] > temp && j >= 0; j-- )
   a[j+1] = a[j];
  a[j+1] = temp;
 }
}

void swap( int *a, int *b){
 int temp;
 temp = *a;
 *a = *b;
 *b = temp;
}
void bubbleSort( int a[] ){
 int i = 0;
 int j = 0;
 int flag = 0;
 for( i = 0; i < N; i++){
  flag = 0;
  for( j = 0; j < (N-1)-i; j++ ){
 /* 这里注意 j < N-1-i 而不是 j < N-i
   if( a[j] < a[j+1] ){
    swap( &a[j], &a[j+1] );
    flag = 1;
   }
  }
  if( flag == 0 )
   return;
 }
}
void quickSort( int a[] ){
 doQuickSort( a, 0, N-1 );
}
void doQuickSort( int a[], int left, int right ){
 int low = left;
 int high = right;
 int temp = a[low];
 while( low < high ){
  while( low < high && a[high] >= temp )
   high --;
  a[low] = a[high];
  while( low < high && a[low] <= temp )
   low ++;
  a[high] = a[low];
 }
 a[low] = temp;
 
 if( left < low-1 )
  doQuickSort( a, left, low-1 );
 if( low+1 < right )
  doQuickSort( a, low+1, right );
}
 
void print( int  a[] ){
 int i = 0;
 for( i = 0; i < N; i++ )
  printf("a[%d] = %d\n,", i,a[i]);
 printf("\n");
}
void initArr(int a[] ){
 int i = 0;
 int temp = 0;
 srand(0);
 for( i = 0; i < N; i++ ){
  do{
   temp = rand()%100;
  }while( findKey(a, temp) == 1 );
  a[i] = temp;
 }
}
int  findKey(int a[], int key){
 int i = 0;
 for( i = 0; i < N; i++ )
  if( a[i] == key )
   return 1;
 return 0;
}
阅读(2607) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~