码迷,mamicode.com
首页 > 编程语言 > 详细

C#实现冒泡排序

时间:2014-10-29 14:42:15      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:style   http   os   ar   for   sp   strong   div   on   

一、算法原理

 

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

二、算法分析

 

平均时间复杂度:冒泡排序最好为O(n) ,最坏为O(n²),平均时间复杂度为O(n²)

 

空间复杂度:O(1)  (用于交换)

 

三、算法稳定性

 

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 

四、冒泡排序有两个很明显的优势

1.“编程复杂度”很低,很容易写出代码;

2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。  

五、C#冒泡排序算法

 
C# 代码   复制
bubuko.com,布布扣bubuko.com,布布扣
//冒泡排序
bubuko.com,布布扣
void BubbleSort(int array[],int n)
bubuko.com,布布扣
{
bubuko.com,布布扣    
bubuko.com,布布扣    int i=0; 
bubuko.com,布布扣    int j=0; 
bubuko.com,布布扣    int temp=0;
bubuko.com,布布扣    int flag = 0;
bubuko.com,布布扣    for(i=0;i<n - 1 ;i++)   /*外循环控制排序的总趟数*/
bubuko.com,布布扣    {
bubuko.com,布布扣        flag = 0;   /*本趟排序开始前,交换标志应为假*/
bubuko.com,布布扣       for(j=n-1;j > i;j--) /*内循环控制一趟排序的进行*/ 
bubuko.com,布布扣       {
bubuko.com,布布扣           if(array[j] < array[j-1] ) /*相邻元素进行比较,若逆序就交换*/
bubuko.com,布布扣           {
bubuko.com,布布扣             temp =array[j];
bubuko.com,布布扣             array[j] = array[j-1];
bubuko.com,布布扣             array[j-1] = temp;
bubuko.com,布布扣             flag = 1;                  /*发生了交换,故将交换标志置为真*/
bubuko.com,布布扣           }
bubuko.com,布布扣           
bubuko.com,布布扣       }
bubuko.com,布布扣        if (flag == 0)  /*本趟排序未发生交换,提前终止算法*/
bubuko.com,布布扣           break;
bubuko.com,布布扣        /*
bubuko.com,布布扣        printf("第%d趟排序结果: \\n",i+1);
bubuko.com,布布扣        PrintArray(array,n);
bubuko.com,布布扣        */
bubuko.com,布布扣
bubuko.com,布布扣       
bubuko.com,布布扣      
bubuko.com,布布扣    }
bubuko.com,布布扣}
bubuko.com,布布扣

 

算法的应用

 
C# 代码   复制
bubuko.com,布布扣bubuko.com,布布扣
//打印数组
bubuko.com,布布扣
void PrintArray(int  array[] , int n)
bubuko.com,布布扣
{
bubuko.com,布布扣
bubuko.com,布布扣  int i;
bubuko.com,布布扣  for(i=0;i<n;i++)
bubuko.com,布布扣   printf(" %d ",array[i]);
bubuko.com,布布扣  printf("\\n");
bubuko.com,布布扣
bubuko.com,布布扣}bubuko.com,布布扣
bubuko.com,布布扣
bubuko.com,布布扣void TestBubbleSort()
bubuko.com,布布扣{
bubuko.com,布布扣    int array[8] ={38,20,46,38,74,91,12,25};
bubuko.com,布布扣    BubbleSort(array,8);
bubuko.com,布布扣    PrintArray(array,8);
bubuko.com,布布扣}
bubuko.com,布布扣

 

输出形式

 

第1趟   第2趟  第3趟   第4趟   第5趟   第6趟   第7趟

12      12      12      12      12      12      12                             

38      20      20      20      20      20      20

20      38      25      25      25      25      25

46      25      38      38      38      38      38

38      46      38      38      38      38      38

74      38      46      46      46      46      46

91      74      74      74      74      74      74

25      91      91      91      91      91      91  

C#实现冒泡排序

标签:style   http   os   ar   for   sp   strong   div   on   

原文地址:http://www.cnblogs.com/gc2013/p/4059330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!