最近突然想研究下算法。嗯,最简单的应该是冒泡排序(BubbleSort)。
对一个数组进行冒泡排序,是把小的数往前排。这时应从数组最后一个数开始历遍。
而冒泡排序也叫下沉排序,是把大的数往后排,应从数组第一个数开始历遍。
以下沉排序为例,通过相邻元素的比较(Array[j]和Array[j+1]),第一次历遍可把最大的元素确定,即最后一个元素Array[n-1]。
第i次历遍,可把第i大元素确定,即Array[n-i]。
有点凌乱,其实学算法应该根据实例来分析的,最后再总结规律。下面是一可执行的排序类。
package algorithm;
public class BubbleSort
{
//排序算法
public static void bubbleSort(int[]array)
{
for(int i=0;i<array.length-1;i++)
{
for(int j=0;j<array.length-i-1;j++)
{
if(array[j]>array[j+1])
{
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
printResult(i+1,array);
}
}
//显示第i趟排序的结果
public static void printResult(int times,int[]array)
{
System.out.print("第"+times+"趟排序:");
for(int i=0;i<array.length;i++)
System.out.print(array[i]+" ");
System.out.println();
}
public static void main(String[]args)
{
int[] array = {4,7,5,3,9,0};
BubbleSort.bubbleSort(array);
}
}
结果如下:
第1趟排序:4 5 3 7 0 9
第2趟排序:4 3 5 0 7 9
第3趟排序:3 4 0 5 7 9
第4趟排序:3 0 4 5 7 9
第5趟排序:0 3 4 5 7 9
从以上打印结果可以看出,第1趟排序把最大数据9下沉到最后一位,第2趟排序把第二大数据7下沉到倒数第二位,第3趟排序把第三大数据5下沉到倒数第三位,可以此类推,第i趟排序把第i大数据下沉到倒数第i位。外循环需n-1趟。
假定数组有n位,外循环次数为n-1,对于第i次外循环,其内循环次数为n-i-1。因此,
总的循环次数为:(n-i-1)(i从0到n-2),为n(n-1)/2,故冒泡排序的时间复杂度为O(n^2)。
OK!Go to sleep .