冒泡-选择排序法

排序法

import java.util.Scanner;
public class Text10_3 {
	public static void main(String[] args) {
		final int n = 5;//定义不可变常量n//c中的#define
		Scanner Sr = new Scanner(System.in);
		System.out.println("输入"+n+"个数字");
		System.out.println("冒泡排序法:");
		System.out.println("从大到小:");
		int a[] = new int [n];
		int i,j,k,min,t;
		for (i = 0;i < a.length;i ++) {
			a[i] = Sr.nextInt();
		}
		
		for(i = 0;i < a.length;i ++)
			for(j = i+1;j <a.length;j ++) {
				if(a[i]<a[j]) {
					k = a[i];
					a[i] = a[j];
					a[j] = k;
				}
			}
		for(i = 0;i <a.length;i ++) {
			System.out.print(a[i] + " ");
		}
		
		System.out.println("\n"+"选择排序法:");
		System.out.println("从小到大:");
		for(i = 0;i < a.length-1;i ++) {
			min = i;
			for(j = i+1;j < a.length;j ++) {
				if(a[j] < a[min])
				{min = j;}
			t = a[i];
			a[i] = a[min];
			a[min] = t;		
			}
		}
		
		for(i = 0;i <a.length;i ++) {
			System.out.print(a[i] + " ");
		}
	}

}

冒泡排序法是两两依次比较,并做交换,交换的次数多。
选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少。

时间复杂度
冒泡排序法最优的情况也就是已经排序好序,不用交换元素,时间花销为:[ n(n-1) ] / 2;所以最优的情况时间复杂度为:O( n^2 );选择一样
最差的情况也就是开始的时候元素是逆序的,那么每一次排序都要交换两个元素,则时间花销为:[ 3n(n-1) ] / 2;(其中比上面最优的情况所花的时间就是在于交换元素的三个步骤);所以最差的情况下时间复杂度为:O( n^2 );选择一样
冒泡:
最优的时间复杂度为:O( n^2 ) ;也可能是O(n),见下面分析
最差的时间复杂度为:O( n^2 );
平均的时间复杂度为:O( n^2 );

for(i =a.length;i > 0;i --,m = 1){
	for(j = 0;j < i;j ++){
		if(a[j] < a[j+1]){
			temp = a[j];
			a[j] = a[j+1];
			a[j+1] = temp;
			m = 0;//如果乱序,m = 0;如果已经排好序,不会交换,m依然等于1;
		}
	}
	if(m)//如果m存在,即m == 1
		break;//打破循环
}

空间复杂度为0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值