冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
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 }
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 }