冒泡排序
主要思想:冒泡排序属于交换排序,即为在待排序序列中选取两个记录,如果这两个记录反序,则交换他们的位置。交换可以消除反序对,当所有反序对都被消除后,排序也就完成了。
过程
将待排序的记录数列划分成有序区和无序区(排序顺序,由小到大)每一趟排序结果找出Arry[]中最大的数,数字数量依次减少。
记录序列:3 2 5 1 6
第1趟 2 3 1 5 6
第2趟 2 1 3 5 6
第3趟 1 2 3 5 6
第4趟 1 2 3 5 6
for(int i=0;i<Arry.length-1;i++) {//总共需要冒泡的次数
for(int j=0;j<Arry.length-1-i;j++) {//每次冒泡的遍历
if(Arry[j]>Arry[j+1]) {//将大的数依次后移
int temp=Arry[j];
Arry[j]=Arry[j+1];
Arry[j+1]=temp;
}
}
}
时间复杂度
冒泡排序的执行时间取决于排序的趟数。平均情况下,起泡排序的时间的时间复杂度与最坏情况下同数量级O(n^2)。最好情况下,正序。最坏情况下,每一次都需要移动。
空间复杂度
冒泡排序只需要一个记录的辅助空间,用来作为记录交换的暂缓单元。起泡排序是一种稳定的排序方法。
程序源码
/**
*
*/
package bubbleSort;
import java.util.Scanner;
/**
* @author 期待
*
*/
public class BubbleSort {
/**
* @param args
*/
public static void Bubble(int Arry[]) {
for(int i=0;i<Arry.length-1;i++) {
for(int j=0;j<Arry.length-1-i;j++) {
if(Arry[j]>Arry[j+1]) {
int temp=Arry[j];
Arry[j]=Arry[j+1];
Arry[j+1]=temp;
}
}
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入几个数并用空格隔开:");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(" ");
int[] b = new int[arr.length];
for(int j = 0; j<b.length;j++) {
b[j] = Integer.parseInt(arr[j]);
}
System.out.println(b.length);
Bubble(b);
for(int k=0;k<b.length;k++) {
System.out.println(b[k]);
}
}
}