您的位置:首页 > 编程语言 > Java开发

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

2016-08-02 23:56 393 查看
前言:由于不是科班出身,在找工作被一番嫌弃后,终于痛下决心要将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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息