冒泡排序:
public void sort(){int out,in;//out指向已经排好序的前一个for( out=nElements-1;out>1;out--){for(in=0;in<out;in++){if(arr[in]>arr[in+1]){swap(in,in+1);//相邻的两个元素比较,交换}}}}//实现冒泡排序
相邻的元素两两比较,out指向末端待排序的元素。
10个数据项,第一次排序9次比较,第二次 8次比较。。。一共9+8+。。。+1=45次
N个数据 1+2+...+N+(N+1)+(N+2)=N(N+1)/2 约做了N^2/2次比较,大约N^2/4次交换(概率,两个数据交换概率1/2)时间复杂度:O(N^2)
数组初始状态:
如图,两两比较,交换(大小颠倒时)
每完成一轮两两比较,即inner+1到达未排序序列的末端,就能将未排序中的一个元素排好序(最大的)。
排好序的状态:
完整代码:
package TwoArray;/*** 冒泡排序 最小的数据项放在最开始,最大的放后面 10个数据项,第一次排序9次比较,第二次 8次比较。。。一共9+8+。。。+1=45次* N个数据 N+(N+1)+(N+2)...+1=N(N+1)/2 约做了N^2/2次比较,大约N^2/4次交换(概率,两个数据交换概率1/2)时间复杂度:O(N^2)* @author zhic**/
public class BubbleSort {int[] arr;int nElements;public BubbleSort(int max) {arr = new int[max];nElements = 0;}//构造函数public void insert(int value){arr[nElements] = value;nElements++;}public void display(){for(int i=0;i<nElements;i++){System.out.print(arr[i] + " ");}}public void swap(int one,int two){int temp = arr[one];arr[one] = arr[two];arr[two] = temp;}//交换两个下标对应的数组值public void sort(){int out,in;//out指向已经排好序的前一个for( out=nElements-1;out>1;out--){for(in=0;in<out;in++){if(arr[in]>arr[in+1]){swap(in,in+1);//相邻的两个元素比较,交换}}}}//实现冒泡排序public static void main(String[] args){int max = 50;BubbleSort arr = new BubbleSort(max);arr.insert(10);arr.insert(0);arr.insert(90);arr.insert(9);arr.insert(30);arr.insert(10);arr.insert(20);arr.insert(40);arr.insert(70);arr.display();System.out.println();arr.sort();arr.display();}
}