冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
 
冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。[1] 
 1 复制代码/*
 2 冒泡排序基本思想
 3 将n个记录看作按纵向排列,每趟排序时自下至上对每对相邻记录进行比较,若次序不符合要求(逆序)就交换。每趟排序结束时都能使排序范围内关键字最小的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小、第三小…的各个记录“冒到”表的第一个、第二个、第三个… 位置上。
 4 
 5    初态      第1趟   第2趟  第3趟   第4趟   第5趟   第6趟   第7趟
 6     38        12      12      12      12      12      12      12                              
 7     20        38      20      20      20      20      20      20
 8     46        20      38      25      25      25      25      25
 9     38        46      25      38      38      38      38      38
10     74        38      46      38      38      38      38      38
11     91        74      38      46      46      46      46      46
12     12        91      74      74      74      74      74      74
13     25        25      91      91      91      91      91      91
14 */
15 //打印数组
16 void PrintArray(int  array[] , int n)
17 {
18 
19   int i;
20   for(i=0;i<n;i++)
21    printf(" %d ",array[i]);
22   printf("\n");
23 
24 }
25 //冒泡排序
26 void BubbleSort(int array[],int n)
27 {
28     
29     int i=0; 
30     int j=0; 
31     int temp=0;
32     int flag = 0;
33     for(i=0;i<n - 1 ;i++)   /*外循环控制排序的总趟数*/
34     {
35         flag = 0;   /*本趟排序开始前,交换标志应为假*/
36        for(j=n-1;j > i;j--) /*内循环控制一趟排序的进行*/ 
37        {
38            if(array[j] < array[j-1] ) /*相邻元素进行比较,若逆序就交换*/
39            {
40              temp =array[j];
41              array[j] = array[j-1];
42              array[j-1] = temp;
43              flag = 1;                  /*发生了交换,故将交换标志置为真*/
44            }
45            
46        }
47         if (flag == 0)  /*本趟排序未发生交换,提前终止算法*/
48            break;
49         /*
50         printf("第%d趟排序结果: \n",i+1);
51         PrintArray(array,n);
52         */
53 
54        
55       
56     }
57 }
58 
59 
60 void TestBubbleSort()
61 {
62     int array[8] ={38,20,46,38,74,91,12,25};
63     BubbleSort(array,8);
64     PrintArray(array,8);
65 }
View Code
 1 冒泡算法C#
 2 namespace数组排序
 3 {
 4 classProgram
 5 {
 6 staticvoidMain(string[]args)
 7 {
 8 inttemp=0;
 9 int[]arr={23,44,66,76,98,11,3,9,7};
10 #region该段与排序无关
11 Console.WriteLine("排序前的数组:");
12 foreach(intiteminarr)
13 {
14 Console.Write(item+"");
15 }
16 Console.WriteLine();
17 #endregion
18 for(inti=0;i<arr.Length-1;i++)
19 {
20 #region将大的数字移到数组的arr.Length-1-i
21 for(intj=0;j<arr.Length-1-i;j++)
22 {
23 if(arr[j]>arr[j+1])
24 {
25 temp=arr[j+1];
26 arr[j+1]=arr[j];
27 arr[j]=temp;
28 }
29 }
30 #endregion
31 }
32 Console.WriteLine("排序后的数组:");
33 foreach(intiteminarr)
34 {
35 Console.Write(item+"");
36 }
37 Console.WriteLine();
38 Console.ReadKey();
39 }
40 }
41 }
View Code

 

posted @ 2015-02-15 09:33  路过相遇错过  阅读(98)  评论(0编辑  收藏  举报