java算法 冒泡排序 与 快速排序思想

前言:由于不是科班出身,在找工作被一番嫌弃后,终于痛下决心要将java学好学透。其中排序是初学java必须要跨过的一道逻辑算法坎,所以必须要垮过去。

冒泡排序:

思路: 1.将数组中的数两两相比,小的往左边排,大的往右边排,很容易想到用遍历方法,2.沉者下沉,轻者上浮。代码如下。

import java.util.Arrays;
import java.util.Random;

public class Maopao {
	
	public static void main(String[] args) {
		//用随机数给数组赋值
		int[] nums = new int[10];
		Random random = new Random();
		for (int i = 0; i < nums.length; i++) {
			nums[i] = random.nextInt(100);
		}
		System.out.println(Arrays.toString(nums));
		int temp = 0;
		//冒泡排序
		for (int i = 0; i < nums.length-1; i++) {
			for (int j = 0; j < nums.length-i-1; j++) {
				if (nums[j] > nums[j+1]) {
					temp = nums[j+1];
					nums[j+1] = nums[j];
					nums[j] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(nums));
	}

}


快速排序:

1.选数组如{21, 68, 5, 86, 74, 58, 4, 71, 99, 10}中的一个数作为基准点(21),遍历,将大的往它的右边排,小的往它的左边排分成两段{5,4,10}21{68,86,74,58,71,99}

2.这两段依然是无序的,于是我们再对两段进行快速排序,多次排序后就能得出了它最终从小到大的顺序(很容易想到递归的思路)

代码如下(看代码实现更容易理解):

import java.util.Arrays;
import java.util.Random;

public class QuickSortDemo {
	public static void main(String[] args) {
		int[] nums = new int[10];
		Random random = new Random();
		for (int i = 0; i < nums.length; i++) {
			nums[i] = random.nextInt(100);
		}
		System.out.println(Arrays.toString(nums));
		quickSort(nums, 0, nums.length-1);
		System.out.println(Arrays.toString(nums));
	}
	
	/**
	 * 排一次
	 * @param nums 做排序的数组
	 * @param low 数组左边的下标
	 * @param hight 数组右边的下标
	 * @return 排序后基准点的下标值
	 */
	public static int getMiddle(int[] nums,int low,int hight){
		int temp = nums[low];//以第一个作为基准点,小的往左排,大的往右排
		while(low < hight){
			while (low < hight && nums[hight] >= temp) {
				hight--;
			}
			//找到一个比low小的将low值替换
			nums[low] = nums[hight];
			
			while(low < hight && nums[low] <= temp ){
				low++;
			}
			//从左往右找,找到一个比temp大的往右排
			nums[hight] = nums[low];
		}
		nums[low] = temp;
		return low;
	}
	/**
	 * 采用递归分而制之
	 */
	public static void quickSort(int[] nums , int low,int hight){
		if (low < hight) {
			int middle = getMiddle(nums, low, hight);//基准点的下标
			quickSort(nums, low, middle-1); //低位排序
			quickSort(nums, middle+1, hight); //高位排序
		}
	}
	
}
参考了该博主的文章,同时也修复了数组有同样元素出现死循环的bug:http://blog.csdn.net/wangkuifeng0118/article/details/7286332
 

结语:what can't kill you will make you stronger!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值