黑马程序员-----JAVA基础--数组排序的两种算法

                                                                                    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、选择排序

  1. 排序原理:首先将第一个角标标记为最小数,其角标位置为最大数的位置;然后使用第一个数和剩下的数依次比较,若剩下的数小于第一个数,则交换这两个角标的数,依次比较下去,就会把最小数交换到第一位。之后将第二个数与后面的数进行依次比较就会比较出第二个最小数,依次类推就可以完成升序排序,反之比较最大数即为降序排序。

  2. 代码思路:首先每次比较出一个数后进行下次比较时将减少一个数,这时可以设计出一个外循环for()进行此操作,之后具体数字的比较可以设计一个for()循环进行每一个数与后面数的依次比较。实现此内外嵌套循环即可完成此排序

  3. 举例:完成数组arr[]={12,17,4,66,45}的降序排序,代码如下:

        

package xiaobing.java.day04;

public class ArryDemo01 {
	public static void arrySort(int[] a){
		//定义外循环,进入内循环时依次选择角标对应的数,到最后一个数时不需要比较所以x-1
		for(int x=0;x<a.length-1;x++){    
			 //定义内循环,进行具体比较,由于第一个数不需要和第一个数比较所以y=1,
			for(int y=x+1;y<a.length;y++){ 
				//比较之后的数字交换
				if(a[x]<a[y]){
					int c;
					c=a[x];
					a[x]=a[y];
					a[y]=c;
					
					
				}
				
			}
		}
	}

	public static void main(String[] args) {
		int[] arr={12,17,4,66,45};
		//排序前
		printArr(arr);
		//排序
		arrySort(arr);
		System.out.println();
		//排序后
		printArr(arr);
		
	}
//定义遍历数组的方法
	public static void printArr(int[] a){
		System.out.print("[");
		for(int x=0;x<a.length;x++){
			if(x!=a.length-1)
				System.out.print(a[x]+",");
			else
				System.out.print(a[x]+"]");
			
		}
	}
}

二、 冒泡排序

        1.排序原理:将相邻的两个数进行比较,符合条件(大或者小)将最小数或最大数一直向右推,比较完第一次后最大数或者最小数就在最右边,下次比较只需要将剩下的数做同样的动作即可排序完成。

        2.代码思路:外循环和选择排序一样,每次相邻数比较也是要进行length-1次;内循环即为前一个数y与后面的数y+1的比较。

        3.举例:完成数组arr[]={12,17,4,66,45}的降序排序,代码如下:

public class ArryDemo02 {
	public static void arrySort(int[] a){
		//定义外循环,进入内循环时依次选择角标对应的数,到最后一个数时没有相邻比较所以x-1
		for(int x=0;x<a.length-1;x++){    
			for(int y=0;y<a.length-x-1;y++){ //-x:每次比较的元素减少,-1:避免角标越界
				if(a[y]<a[y+1]){
					int c;
					c=a[y];
					a[y]=a[y+1];
					a[y+1]=c;
					
					
				}
				
			}
		}
	}

	public static void main(String[] args) {
		int[] arr={12,17,4,66,45};
		//排序前
		printArr(arr);
		//排序
		arrySort(arr);
		System.out.println();
		//排序后
		printArr(arr);
		
	}
//定义遍历数组的方法
	public static void printArr(int[] a){
		System.out.print("[");
		for(int x=0;x<a.length;x++){
			if(x!=a.length-1)
				System.out.print(a[x]+",");
			else
				System.out.print(a[x]+"]");
			
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值