简单排序--冒泡排序

冒泡排序:

	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();
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值