排序-冒泡排序
来源:互联网 发布:开发程序员 编辑:程序博客网 时间:2024/06/07 02:32
冒泡排序(BubbleSort)的基本概念
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。[2]
不断的循环的从第1个 和2、3、.... 开始比较。把比较的结果中 最小的放到第一位;
把第2个和3、4......开始比较。把比较的结果中 最小的放到第二位;
...........
Java参考代码:
public class Bubble {public final static int[] score = { 23, 36, 12, 89, 56,32 };public static void main(String[] args) {//原数据for (int i = 0; i < score.length; i++) {System.out.print(score[i] + " ");}System.out.println(); bubble2(score);//排序之后的数据for (int i = 0; i < score.length; i++) {System.out.print(score[i] + " ");}}/** * 冒泡排序 * 不断的循环的从第1个 和2、3、.... 开始比较。把比较的结果中 最小的放到第一位; 把第2个和3、4......开始比较。把比较的结果中 最小的放到第二位; ........... * @param a2 * @return */private static int[] bubble(int[] a) {int temp;// 目标 通过不断的比较把最小的数字放到前面for (int i = 0; i < a.length; i++) {for (int j = i + 1; j < a.length; j++) {if (a[j] < a[i]) {temp = a[j];a[j] = a[i];a[i] = temp;}}}return a;}/** * 冒泡排序 * 从最后一个开始不断的比较最小的一个,将其排到前面的位置 * @param a * @return */private static int[] bubble2(int[] a) {int temp,count=a.length;// 目标 通过不断的比较把最小的数字放到前面for (int i = 0; i < count; i++) {for (int j = count-1; j >i; j--) {System.out.println(j);if (a[j]<a[j-1]) {temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}}return a;}}
C语言相关代码[1]:
#include <stdio.h>#include<time.h> #define ARRAYLEN 6#include <stdlib.h>int CreateData(int arr[],int n,int min,int max) //创建一个随机数组,a保存生成的数据,n为数组元素的数量 { int i,j,flag; srand(time(NULL)); if((max-min+1)<n) return 0; //最大数与最小数之差小于产生数组的数量,生成数据不成功 for(i=0;i<n;i++) { do { arr[i]=(max-min+1)*rand()/(RAND_MAX+1)+min; flag=0; for(j=0;j<i;j++) { if(arr[i]==arr[j]) flag=1; } }while(flag); } return 1;}void BubbleSort(int a[],int n){ int i,j,t; for(i=0;i<n-1;i++) { for(j=n-1; j>i; j--) { if(a[j-1]>a[j]) {printf("%d \n",j); t=a[j-1]; a[j-1]=a[j]; a[j]=t; } } printf("第%2d遍:",i+1); for(j=0;j<n;j++) printf("%d ",a[j]); printf("\n"); }}void BubbleSort1(int a[],int n){ int i,j,t,flag=0; //flag用来标记是否发生交换 for(i=0;i<n-1;i++) { for(j=n-1;j>i;j--) { if(a[j-1]>a[j])//交换数据 { t=a[j-1]; a[j-1]=a[j]; a[j]=t; flag=1; } } printf("第%2d遍:",i+1); for(j=0;j<n;j++) printf("%d ",a[j]); printf("\n"); if(flag==0) //没发生交换,直接跳出循环 break; else flag=0; }}int main(){ int i,a[ARRAYLEN]; for(i=0;i<ARRAYLEN;i++) a[i]=0; if(!CreateData(a,ARRAYLEN,1,100)) { printf("生成随机数不成功!\n"); getch(); return 1; } printf("原数据:"); for(i=0;i<ARRAYLEN;i++) printf("%d ",a[i]); printf("\n"); BubbleSort(a,ARRAYLEN); printf("排序后:"); for(i=0;i<ARRAYLEN;i++) printf("%d ",a[i]); printf("\n"); getch(); return 0; }
相关资料:
[1]零基础学算法(第2版)[2]http://baike.baidu.com/view/254413.htm
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- gcc扩展
- Android 巧用Itent.ACTION_PICK和Intent.ACTION_GET_CONTENT(三)
- 程序异常退出时发送邮件报告的代码
- 黑马程序员------java中的反射,beanutils,注解的应用。
- 些脚本的时,注意事项
- 排序-冒泡排序
- 学习linux心情
- ApiDemo学习 炫酷的 layoutAnimation
- XML Lesson 3
- Android的Activity屏幕切换动画(二)-左右滑动深入与实战
- eclipse的JDK,Tomcat,Ant环境变量设置
- maven 3 jar 运行文件打包
- error LNK2001:unresolved external symbol "public: __thiscall 类名::函数名
- 第五次上机实验