当前位置:阳光沙滩 >Java > 查看文章
阿里云优惠码

1.冒泡排序和选择排序

看完这篇文章,无论你是C语言还是JAVA语言都可以的,因为这是理论的东西,明白了道理,自己就能实现。图文结合,再加上代码,不可能不懂的!这些排序一般用于数组中操作,平时我们可以用数组工具进行排序,查找等操作,不过在面试的时候,可能需要你写排序,或者别人问你的时间你需要解释一下。

冒泡排序

冒泡排序,就是你水泡一样,往上冒,直接上图解释吧!

%e5%9b%be%e7%89%8711

这里排的是从小到大,当然,也可以从大到小。

也就是说,第一次排序,一定是把最大值找到了最右边,第二次排序,把剩下的元素里,找出最大值排到右边。因此每排序一次,就少比较一次。

代码实现如下:

public class Demo{
	public static void main(String[] args){
		
		//搞个数组
		int[] arrays = new int[]{23,11,9,89,120,230};
		
		//排序前输出
		printArrays(arrays);
		
		//冒泡排序
		maopaoSort(arrays);
		
		//排序后输出
		System.out.println("最后结果:");
		printArrays(arrays);
	}
	public static void maopaoSort(int[] arrays){
		for(int i = 0;i<arrays.length;i++){
			System.out.println("第"+i+"次排序");
			printArrays(arrays);
			for(int j = 0;j<arrays.length-i-1;j++){				
				if(arrays[j]>arrays[j+1]){//从小到大
					int temp = arrays[j];
					arrays[j] = arrays[j+1];
					arrays[j+1] = temp;
				}
			}
		}
	}
	//数组输出方法
	public static void printArrays(int[] arrays){
		System.out.print("[");
		for(int i = 0;i<arrays.length;i++){
			if(i!=arrays.length-1){
				System.out.print(arrays[i]+",");
			}else{
				System.out.println(arrays[i]+"]");
			}
		}
	}
}

结果如下:

[23,11,9,89,120,230]
第0次排序
[23,11,9,89,120,230]
第1次排序
[11,9,23,89,120,230]
第2次排序
[9,11,23,89,120,230]
第3次排序
[9,11,23,89,120,230]
第4次排序
[9,11,23,89,120,230]
第5次排序
[9,11,23,89,120,230]
最后结果:
[9,11,23,89,120,230]

相信到这里,你已经懂得了什么 是冒泡排序,赶快动手写写吧,你一定可以做到的!

2.选择排序

选择排序,是选择出一个元素,然后跟所有的元素逐个比较,根据条件进行切换。

%e5%9b%be%e7%89%8722

代码体现(这里排列从小到大)

public class Demo{
	public static void main(String[] args){
		
		//弄一个数组
		int[] arrays = new int[]{12,34,89,10,8};
		
		//排序前先输出一次
		printArrays(arrays);
		
		//进行排序
		chooseSort(arrays);//我不知道选择是不是这样写的,嘻嘻!我只会说,不会写英语。
		
		//排序前先输出一次
		System.out.println("排序后的结果:");
		printArrays(arrays);
		
	}
	//选择排序
	public static void chooseSort(int[] arrays){
		for(int i = 0;i<arrays.length;i++){
			System.out.println("第"+i+"次排序结果:");
			printArrays(arrays);
			for(int j = i;j<arrays.length-1;j++){
				if(arrays[i]>arrays[j+1]){
					int temp = arrays[i];
					arrays[i] = arrays[j+1];
					arrays[j+1] = temp;
				}
			}
		}
	}
	//打印数组的函数
	public static void printArrays(int[] arrays){
		System.out.print("[");
		for(int i = 0;i<arrays.length;i++){
			if(i!=arrays.length-1){
				System.out.print(arrays[i]+",");
			}else{
				System.out.println(arrays[i]+"]");
			}
		}
	}
}

 

把结果和图片对象一下吧,我画得很辛苦的,一个字,累呀!只希望大家理解了冒泡和选择排序!

运行结果:

[12,34,89,10,8]
第0次排序结果:
[12,34,89,10,8]
第1次排序结果:
[8,34,89,12,10]
第2次排序结果:
[8,10,89,34,12]
第3次排序结果:
[8,10,12,89,34]
第4次排序结果:
[8,10,12,34,89]
排序后的结果:
[8,10,12,34,89]

好啦,排序就讲到这里啦,另外扯淡一个东西,就是交换元素的方法。

3.交换元素

在上面的代码中,交换元素主要用了第三方的变量来暂时存放一下。那么有不有不借助第三方变量来交换两个元素的呢?答案是有的哈!

1、通过加减法来交换,但是这种交换有弊端,什么弊端呢,就是这个要是数太大了,超出int的范围了,那就不可以了。

public class Demo{
	public static void main(String[] args){
		
		//交换两个数
		int x = 8,y = 10;
		
		//方法一:
		x = x + y;
		y = x - y;
		x = x -y;
		
		System.out.println("x = "+x+","+"y="+y);
	}
}

2、通过位操作来交换两个数

public class Demo{
	public static void main(String[] args){
		
		//交换两个数
		int a = 8,b = 10;
		
		//方法二:
		a = a^b;
		b = a^b;
		a = a^b;		
		
		System.out.println("a = "+a+","+"b="+b);
	}
}

 

3、通过第三方变量来交换(略),嘻嘻!

好啦,这个排序到此结束,当然还有比较多的排序方法,比如说,插入排序,归并排序,希尔排序,堆排序,恶心多了!

7K
相关文章
为您推荐
各种观点