基本排序 -- 直接,选择,冒泡(一)

基本排序 – 直接,选择,冒泡(一)

以从大到小排序为例.

(1)直接排序

(1)将第一个数与后面的数进行比较,比第一个数大的,则交换
(2)将第二个数与后面的数进行比较。比第一个数大的,则交换
(3)将第三个......

(1)直接排序

public class Sort01 {

	public static void main(String[] args){

	//	对数组进行从大到小排序,用直接排序
	//	第一个与后面的比较,比第一个数字大的都进行交换

		int[] temp = {22,31,45,76,78,56,23,91,16,6};
		for(int i = 0;i<temp.length;i++){
			for(int j = i;j<temp.length;j++){
				if(temp[i]<temp[j]){
					int t = temp[i];
					temp[i] = temp[j];
					temp[j] = t;
				}
			}
		}
		for(int x : temp){
			System.out.print(x +" ");
		}	
	}
}

执行结果为:

D:\Java>javac Sort01.java

D:\Java>java Sort01
91 78 76 56 45 31 23 22 16 6

(2)选择排序

	(1)第一遍循环,求出最大值与第一个数字进行交换
	(2)第二遍循环,求出次大值与第二个数字进行交换
	(3)第三遍循环,求出次次大值与第三个......

(2)选择排序

public class Sort02{
	public static void main(String[] args){
			
	//	选择排序,由大到小排列
	//	先找处最大值,记录下标,与第一个数据进行交换

		int[] temp = {22,31,45,76,78,56,23,91,16,6};
		for(int i = 0;i<temp.length;i++){
			int max = temp[i];
			int index = i;
			for(int j = i;j<temp.length;j++){
				if(max<temp[j]){
					max = temp[j];
					index = j;
				}
			}
			int t = temp[index];
			temp[index] = temp[i];
			temp[i] = t;
		}
		for(int x : temp){
			System.out.print(x +" ");
		}
	}
}

代码执行结果为:

D:\Java>javac Sort02.java

D:\Java>java Sort02
91 78 76 56 45 31 23 22 16 6

(3)冒泡排序

	(1)在数据之间,i 位上的数组与i+1数字进行比较,将大数字放在前面
	(2)在执行第一次的操作

(3)冒泡排序

public class Sort03{
	public static void main(String args[]){

	//	由大到小排列,冒泡排序
	//	先互两两之间进行比较,将两数之间的最大值置于前

		int[] temp = {22,31,45,76,78,56,23,91,16,6};
		for(int i = 0;i<temp.length;i++){
			for(int j = 0;j<temp.length-i-1;j++){
				if(temp[j]<temp[j+1]){
					int t = temp[j];
					temp[j] = temp[j+1];
					temp[j+1] = t;
				}
			}
		}
		for(int x : temp){
			System.out.print(x +" ");
		}
	}
}

代码执行结果为:

D:\Java>javac Sort03.java

D:\Java>java Sort03
91 78 76 56 45 31 23 22 16 6

冒泡排序(收敛速度快),适用于对一个数组或一个数组的某一个部分排序

(4)增强for循环

for(int x : temp){
			System.out.print(x +" ");
		}

作用与 for 循环相同,将 temp 的一个值赋给 x,在输出,一直循环,直到 temp 中没有值。

(5)数字反转(空间换时间)

Java中很著名的思想:用空间换时间
以数字反转为例:
(4)数字反转(空间小效率低)

public class Demo {
	public static void main(String args[]) {
		int[] temp = {1,2,3,4,5,6,7};
		for(int i = 0;i<=temp.length/2;i++) {
			int t = temp[i];
			temp[i] = temp[temp.length-1-i];
			temp[temp.length-1-i] = t;
		}
		for(int x : temp){
			System.out.print(x +" ");
		}
	}
}

执行结果为:

D:\>javac Demo.java

D:\>java Demo
7 6 5 4 3 2 1

(5)数字反转(效率高空间大)

public class Demo {
	public static void main(String args[]) {
		int[] temp = {1,2,3,4,5,6,7};
		int[] temp1 = new int[temp.length];
		for(int i = 0;i<temp.length;i++) {
			temp1[i] = temp[temp.length-1-i];
		}
		for(int x : temp1){
			System.out.print(x +" ");
		}
	}
}

执行结果为:、

D:\>javac Demo.java

D:\>java Demo
7 6 5 4 3 2 1

在Java中通过使得所占内存(空间)增大,而将效率增强(时间短),或者用时间换取内存变小。
鱼和熊掌不可得兼!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值