冒泡排序算法的运作如下:(从后往前)
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
JavaScript实现
1 var arr = prompt("请输入一个数组(以“,”隔开):").split(",").map(function(data){ 2 return +data;}); 3 console.log("输入的数组是:"+arr); 4 5 function fun(arr){ 6 var i,j,temp; 7 for(i = 0; i < arr.length; i++){ 8 for(j = 0; j < arr.length-1-i; j++){ //注意:j < arr.length-1-i;这里是减i。 9 if(arr[j] > arr[j+1]){ 10 temp = arr[j]; 11 arr[j] = arr [j+1]; 12 arr[j+1] = temp; 13 } 14 } 15 } 16 return arr; 17 } 18 19 console.log("排序后的数组是: "+fun(arr));
优化:
1 var arr = prompt("请输入一个数组(以“,”隔开):").split(",").map(function(data){ 2 return +data;}); 3 console.log("输入的数组是:"+arr); 4 5 function fun(arr){ 6 var i,j,temp,flag=0;//这里 7 for(i = 0; i < arr.length; i++){ 8 for(j = 0; j < arr.length-1-i; j++){ //注意:j < arr.length-1-i;这里是减i。 9 if(arr[j] > arr[j+1]){ 10 flag=1;//这里 11 temp = arr[j]; 12 arr[j] = arr [j+1]; 13 arr[j+1] = temp; 14 } 15 } 16 if(flag==0)break;//这里 17 } 18 return arr; 19 } 20 21 console.log("排序后的数组是: "+fun(arr));
C语言
1 #include <stdio.h> 2 void fun(int *arr,int size) 3 { 4 int i, j, temp; 5 for(i=0; i<size; i++) 6 { 7 for(j=0; j<size-1-i; j++) 8 { 9 if(arr[j] > arr[j+1]) 10 { 11 temp = arr[j]; 12 arr[j] = arr[j+1]; 13 arr[j+1] = temp; 14 } 15 } 16 } 17 } 18 19 int main() 20 { 21 int arr[] = {4,3,5,6,1,2,10,9,8}, i, size; 22 size = sizeof(arr)/sizeof(arr[0]); 23 fun(arr,size); 24 for(i=0; i<size; i++) 25 { 26 printf("%d ",arr[i]); 27 28 } 29 printf(" "); 30 }