菜鸡的冒泡排序

冒泡排序的2种实现方法最近复习冒泡排序(bubble_sort)时,感觉直接拍的话太死板,而且当数组元素过多时比较浪费时间,于是就上网搜索了下,然后发现了其他的1种方法1.首先是最开始学习的冒泡排序的算法这种方法就是进行循环遍历数组,相邻的两个之间进行比较,符合条件交换位置,就不在进行过多的解释了。(标准)冒泡排序中有两层for循环外层for循环正好进行N次迭代,但内部循环越来越少。1...
摘要由CSDN通过智能技术生成

冒泡排序的2种实现方法

最近复习冒泡排序(bubble_sort)时,感觉直接拍的话太死板,而且当数组元素过多时比较浪费时间,于是就上网搜索了下,然后发现了其他的1种方法
1.首先是最开始学习的冒泡排序的算法
这种方法就是进行循环遍历数组,相邻的两个之间进行比较,符合条件交换位置,就不在进行过多的解释了。
(标准)冒泡排序中有两层for循环
外层for循环正好进行N次迭代,但内部循环越来越少。
1.i=0,进行(N-1)次迭代
2.i=1 ,进行(N-2)次迭代
3.i=2,进行(N-3)次迭代。

n.i=n-1,进行0次迭代
因此,总迭代次数=(N-1)+(N-2)+…+1+0=N
(N-1)/2
总时间=o(N^2)

#include <iostream>                             
using namespace std;                            
//冒泡排序                                      
void bubble_sort(int a[],int lenth)             
{                                               
 int i,j;                                   /
 int temp = 0;                              /
 for(i = 0; i < lenth - 1; i++){             
  for(j = 0; j < lenth - 1 - i; j++){     
   if(a[j] > a[j + 1]){                
    temp = a[j];                    
    a[j] = a[j + 1];                
    a[j + 1] = temp;                
   }          
  }                                       
 }                                           
 for(i = 0; i < 10; i++){                    
  if(i % 5 == 0 && i != 0){               
   cout << endl;                       
  }                                       
  cout << a[i] << " ";                    
 }                                           
}             
 int main()                                 
{                                          
 int a[10] = {1,5,7,98,65,3,4,59,41,45};
 bubble_sort1(a,10);                    
 return 0;                              
}                                                           

2.鸡尾酒排序(cocktail_sort)也是一种变相的冒泡排序
*就是用2分法的思想,将数组分成两部分排序。即排序从前往后排序的同时,从后往前排
你每趟循环走完后,就将最大(较大,非第一次时)的数放到最后面,最小(较小)的放到最前面,并且 left+1,right-1 这样在第二次遍历的时候便不再扫描已经排好的数,这样就减少了排序次数,。
*

void cocktail_sort(int a[], int lenth)      
{                                           
 int i,left = 0,right = lenth - 1;       
 int temp = 0;                           
 while(left < right){                    
  for(i = left; i < right; i++){      
   if(a[i] > a[i + 1]){            
    temp = a[i];                
    a[i] = a[i + 1];            
    a[i + 1] = temp;            
   }                               
  }                                   
  right--;                            
  for(i = right; i > left; i--){      
   if(a[i - 1] > a[i]){            
    temp = a[i];                
    a[i] = a[i - 1];            
    a[i - 1] = temp;            
   }                               
  }                                   
  left++;                             
 }                                       
 for(i = 0; i < 10; i++){                
  if(i % 5 == 0 && i != 0){           
   cout << endl;                   
  }                                   
  cout << a[i] << " ";                
 }                                       
}                                           

鸡尾酒排序最糟或是平均所花费的次数都是O(n²),但如果序列在一开始已经大部分排序过的话,会接近O(n)。如果想详细了解鸡尾酒排序算法。请点击下面的链接

https://baike.baidu.com/item/鸡尾酒排序

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值