冒泡排序算法

来源:互联网 发布:淘宝免费购物 编辑:程序博客网 时间:2024/06/06 21:03

冒泡排序是一种比较排序,下面我实现一个从小到大的冒泡排序,原理如下:

1、开始:有length-1次循环,每次参与循环的是未排序的数。第一次参与循环的是整个数组,因为假设整个数组是无序的。每次循环需要设置一个标志位: boolean flag = false;表示循环过程中是否产生了交换。

2、过程:循环过程中,相邻的两个元素进行比较,如果array[j] > array[j+1],则交换两者顺序,同时标志位flag = true;表示产生了交换。每一次循环结束后,最大数沉到未排序部分的尾部,每次循环找出一个最大数。

3、结束:每次循环结束后,如果标志位flag未改变的话,证明未排序的部分中没有array[j] > array[j+1],即未排序部分已经有序,这时,跳出循环,排序结束。或者length-1次循环结束后,数组有序。


package 冒泡排序算法;import java.util.Scanner;public class BubbleSort {public void bubblesort(int array[]){/*length表示数组array[]的长度*/int length = array.length;/*定义了标志flag,判断两个数有没有交换,如果交换则无true,否则为false*/boolean flag = false;/* * 每一次循环结束后,最大数沉到未排序部分的尾部,每次循环找出一个最大数 * 其中i表示趟数,j是一趟中比较的次数 */for(int i=1;i<length;i++){flag = false;for(int j=0;j<length-i;j++){/*  * 相邻的两个元素进行比较,如果array[j]>array[j+1],则交换两者顺序, * 同时标志位flag = true;表示产生了交换 */if(array[j] > array[j+1]){int temp;temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}}/* * 每次循环结束后,如果标志位flag未改变的话,证明未排序的部分中没有array[j]>array[j+1], * 即未排序部分已经有序,这时,跳出循环,排序结束 * */if(flag == false) break;}}public static void main(String[] args) {// TODO 自动生成的方法存根BubbleSort bs = new BubbleSort();Scanner sc = new Scanner(System.in);System.out.print("请输入要排序的数组的个数 n = ");int n = sc.nextInt();/*Java中数组的初始化,静态的初始化*/int num[] = new int[n];System.out.print("请输入要排序的数组:");for(int a=0;a<n;a++){num[a] = sc.nextInt();}bs.bubblesort(num);System.out.print("冒泡排序后的的数组为:");/* * 冒号表示遍历int型数组,每一次访问数组num[]的时候读取的数据放入int型的x中 * 和for(int b=0;b<n;b++)是一样的 */for(int x:num){System.out.print(x+" ");}System.out.println();}}




0 0
原创粉丝点击