经典系列――鸡尾酒排序

 鸡尾酒排序,听名字真给力,原来还有这样的排序(其实我第一次听说的时候也感觉到很特别);

那么什么是“鸡尾酒排序”呢??

说白了,它就是在以前我们学习“冒泡排序”升级而来的,想一下“冒泡排序”,那时我们选中一端开始向另外一端进行“冒泡”,那么这个“鸡尾酒排序”其实就是往两端“冒泡”,这样说大体是不是能明白呢!我想大家应该差不多都可以啊,那么看看下面的图示你会更有心得:

因为图片大于500k,只能以附件的形式

http://down.51cto.com/data/670041

  
  
  
  
  1. #include <stdio.h> 
  2. #define true 1 
  3. #define false 0 
  4.  
  5. void cocktail_sort(int *list, int list_length) 
  6. {  
  7.     int bottom = 0,top = 0,swapped = true
  8.     int swap_temp = 0
  9.     int i; 
  10.      
  11.     top = list_length - 1; 
  12.  
  13.     while(swapped == true) 
  14.     { 
  15.         swapped = false;  
  16.         for(i = bottom; i < top; i++) 
  17.         { 
  18.             if(list[i] > list[i + 1]) 
  19.             { 
  20.                 swap_temp = list[i]; 
  21.                 list[i] = list[i+1]; 
  22.                 list[i+1] = swap_temp; 
  23.  
  24.                 swapped = true
  25.             } 
  26.         } 
  27.         top--;  
  28.          
  29.         for(i = top; i > bottom; i--) 
  30.         { 
  31.             if(list[i] < list[i - 1])  
  32.             { 
  33.                 swap_temp = list[i]; 
  34.                 list[i] = list[i-1]; 
  35.                 list[i-1] = swap_temp; 
  36.                 swapped = true
  37.             } 
  38.         } 
  39.         bottom++;   
  40.     } 
  41. int main(int argc,char *argv[]) 
  42.     int p[]={23,21,2,3,61,3,26,27,62}; 
  43.     int i; 
  44.     cocktail_sort(p,sizeof(p)/4); 
  45.     for(i=0;i<sizeof(p)/4;i++) 
  46.     { 
  47.         printf("%d ",p[i]); 
  48.     } 
  49.     printf("\n"); 
  50.     return 0; 

 运行结果:

 

 

你可能感兴趣的:(经典,鸡尾酒排序)