当前位置: 首页 >> 程序设计 >> 数据结构和算法 >> 对冒泡算法的改进
 

对冒泡算法的改进

作者:      来源:http://blog.csdn.net/wujilin     发表时间:2007-03-22     浏览次数:      字号:    

对一组无序的数字进行排序,冒泡方法是我们常用的一种方法。它的主要思想是对相临的两个数字进行比较然后选较大(小)的一个起来,另一个沉下去。对N个数字,我们需要进行N-1趟,但是有时候我们根本不需要对每一组数字从头到尾都进行遍历,我们指需对那部分无序的地方排列即可完成任务,这样可以提高算法的质量。
 
1
 对于一个本来就有序的数组,我门只遍历一边,就可以判断出它是有序的,然后结束任务。
 
for (i = 0; i < 9 && tag ; i++) //tag 这里做一个标志,判断它是否已经有序了
   {
          tag = 0;
       for ( j = 0; j < 10 - i - 1; j++)
          {
                 if (a[j] > a[j+1])
                 {
                        temp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = temp;
                     tag = 1;
                 }
          }
   }
 
2
 对一组数据前部分有序后部分无序算法
for(i = 0; i <= 8 && k >= 0 ; i++)
          {
                 k = -1;
          for(j = k+1; j <= 10-i-1 ; j++ )
          {
                 if(a[j] > a[j+1])
                 {
                        temp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = temp;
                
                        if (k == -1)
                        {
                           k = j + 1;
                      
                        }
 
                 } 
          }
 
 主要思想:
 我们主要是找到第一个交换的地点然后以这个点为起点对它后面的数字排序即可。
 
3 对一组数据前无序后有序
while(k1 >= 0)
   {
          k2 = k1;
          k1 = -1;
 
          for (i = 0; i < k2 ; i++)
          {
                 if (a[i] > a[i+1])
                 {
                        temp = a[i];
                        a[i] = a[i+1];
                        a[i+1] = temp;
                        k1 = i;
                 }
          }
 
   }
主要思想:我们找到最后一次交换的点,以该点作为终点,然后从O到该点进行排序。
 
但对于前无序中间有序后无序的情况,没进一步考虑,呵。
 
 
如果有那里不足,希望大家给个意见,谢谢。

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •