假设有n个数,按从小到大排序:函数
function bubbleSort(arr) { const length = arr.length; for (let i = 0; i < length - 1; i++) { let changeOccur = false; //用于标记某次外循环中,是否方式内循环交换事件 for (let j = 0; j < length - i -1; j++) { if (arr[j] > arr[j+1]) { /* const temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; */ //这三行的交换函数用ES6来写: [arr[j], arr[j+1]] = [arr[j+1], arr[j]]; changeOccur = true; } } if (!changeOccur) { //若是一次外循环中,没有发生一次内循环交换,那么能够直接结束排序比较 break; } } }
双向的冒泡排序。性能
function coaktailBubbleSort(arr) { const length = arr.length; let low = 0; let high = length - 1; while(low < high) { let changeOccur = false; for (let j = low; j < high; j++) { if(arr[j] > arr[j+1]) { [arr[j], arr[j+1]] = [arr[j+1], arr[j]]; changeOccur = true; } } if(!changeOccur) { break;//若是一次交换也没有发生,那直接就能够跳出,结束排序 } high--; changeOccur = false; for (let j = high; j > low; j--) { if (arr[j] < arr[j-1]) { [arr[j-1], arr[j]] = [arr[j], arr[j-1]]; changeOccur = true; } } if(!changeOccur) { break; } low++; } }
# include<stdio.h> void bubble(int *list,int len) { int i,j,t,flag=0; for(i=0;i<len-1;i++) { flag=0;//设置标记,当某一轮交换没有交换任何数,那下一轮交换也没必要进行了 for(j=0;j<len-1-i;j++) { if(list[j]>list[j+1]) { t=list[j]; list[j]=list[j+1]; list[j+1]=t; flag=1; } } if(flag==0) { break; } } } void main() { int n,list[10]; printf("请输入10个整数:"); for(n=0;n<10;n++) { scanf("%d",&list[n]); } printf("\n"); bubble(list,10); for(n=0;n<10;n++) { printf("%d\t",list[n]); } printf("\n"); }
#include<stdio.h> void CocktailBubble(int *list,int n) { int low=0,high=n-1,j,t,flag; while(low<high) { flag=0;//一次进行两趟for循环,第一个for循环排最大值(次大值),第二个for循环排最小值(次小值),只要其中一趟没有交换任何数字就能够结束排序 for(j=low;j<high;j++) { if(list[j]>list[j+1]) { t=list[j]; list[j]=list[j+1]; list[j+1]=t; flag=1; } } if(flag==0) { break; } high--;//上述for循环第一次结束,排完最大值;第二次,排完次大值 flag = 0; for(j=high;j>low;j--) { if(list[j]<list[j-1]) { t=list[j]; list[j]=list[j-1]; list[j-1]=t; flag = 1; } } if(flag==0) { break; } low++;//上述for循环第一次结束,排完最小值;第二次,排完次小值 } } void main(){ int i,list[10]; printf("请输入10个整数:"); for(i=0;i<10;i++){ scanf("%d",&list[i]); } for(i=0;i<10;i++){ printf("%d ",list[i]); } printf("\n"); CocktailBubble(list,10); for(i=0;i<10;i++){ printf("%d ",list[i]); } printf("\n"); }