冒泡排序(Bubble Sort)是一种简单的排序算法,由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的思想是重复地走访过要排序的数列,一次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行到没有元素需要交换,也就是说该数列已经排序完成。算分名字的由来是因为越小的元素会经过交换慢慢的“浮”到数列的顶端。
冒泡排序算法基本步骤(升序):
1.比较相邻的元素。如果第一个比第二大,则交换二者。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。此步完成后,最后的元素就是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒牌排序演示图:
代码实现:
C语言代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define N 10 5 6 int main() 7 { 8 int i, j, temp; 9 int arr[N] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86}; 10 for(i=0; i<N-1; i++) { 11 for(j=0; j<N-1-i; j++) { 12 if(arr[j] > arr[j+1]) { 13 temp = arr[j]; 14 arr[j] = arr[j+1]; 15 arr[j+1] = temp; 16 } 17 } 18 } 19 for(i=0; i<N; i++) { 20 printf("%-3d", arr[i]); 21 } 22 printf(" "); 23 return 0; 24 }
Java代码:
1 public class BubbleSort { 2 3 public static void main(String[] args) { 4 5 int temp = 0; 6 int arr[] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86}; 7 8 for(int i=0; i<arr.length-1; i++) { 9 for(int j=0; j<arr.length-1-i; j++) { 10 if(arr[j] > arr[j+1]) { 11 temp = arr[j]; 12 arr[j] = arr[j+1]; 13 arr[j+1] = temp; 14 } 15 } 16 } 17 18 for(int i=0; i<arr.length; i++) { 19 System.out.print(arr[i]+ " "); 20 } 21 } 22 }
算法优化:增加有序标志,内层循环比较一次完成,若未发生交换,则已有序,排序结束。
C语言代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define N 10 5 6 int main() 7 { 8 int i, j, temp, isSorted; 9 int arr[N] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86}; 10 for(i=0; i<N-1; i++) { 11 isSorted = 1; 12 for(j=0; j<N-1-i; j++) { 13 if(arr[j] > arr[j+1]) { 14 temp = arr[j]; 15 arr[j] = arr[j+1]; 16 arr[j+1] = temp; 17 isSorted = 0; 18 } 19 } 20 if(isSorted){ 21 break; 22 } 23 } 24 for(i=0; i<N; i++) { 25 printf("%-3d", arr[i]); 26 } 27 printf(" "); 28 return 0; 29 }
Java代码:
1 public class BubbleSort { 2 3 public static void main(String[] args) { 4 5 int temp = 0; 6 boolean isSorted = true; 7 int arr[] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86}; 8 9 for(int i=0; i<arr.length-1; i++) { 10 isSorted = true; 11 for(int j=0; j<arr.length-1-i; j++) { 12 if(arr[j] > arr[j+1]) { 13 temp = arr[j]; 14 arr[j] = arr[j+1]; 15 arr[j+1] = temp; 16 isSorted = false; 17 } 18 } 19 if(isSorted) { 20 break; 21 } 22 } 23 24 for(int i=0; i<arr.length; i++) { 25 System.out.print(arr[i]+ " "); 26 } 27 } 28 }
参考资料:维基百科
转载请注明出处:http://www.cnblogs.com/michaelwong/p/4114938.html