java算法 冒泡排序 与 快速排序思想
2016-08-02 23:56
393 查看
前言:由于不是科班出身,在找工作被一番嫌弃后,终于痛下决心要将java学好学透。其中排序是初学java必须要跨过的一道逻辑算法坎,所以必须要垮过去。
冒泡排序:
思路: 1.将数组中的数两两相比,小的往左边排,大的往右边排,很容易想到用遍历方法,2.沉者下沉,轻者上浮。代码如下。
快速排序:
1.选数组如{21, 68, 5, 86, 74, 58, 4, 71, 99, 10}中的一个数作为基准点(21),遍历,将大的往它的右边排,小的往它的左边排分成两段{5,4,10}21{68,86,74,58,71,99}
2.这两段依然是无序的,于是我们再对两段进行快速排序,多次排序后就能得出了它最终从小到大的顺序(很容易想到递归的思路)
代码如下(看代码实现更容易理解):
结语:what can't kill you will make you stronger!
冒泡排序:
思路: 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!
相关文章推荐
- 归并排序,插入排序,快速排序,冒泡排序,选择排序的思想
- 冒泡排序,快速排序,堆排序比较
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 选择排序,插入排序,冒泡排序,希尔排序,快速排序,归并排序
- 快速排序、冒泡排序
- 冒泡排序、插入排序、快速排序
- 快速排序,选择排序,冒泡排序
- 快速排序、冒泡排序
- 基本排序算法——直接插入排序、冒泡排序、快速排序
- 数据结构之二分法查找、快速排序思想与实现
- 3种排序算法的可视化程序 冒泡排序 选择排序 快速排序
- 冒泡排序、插入排序、快速排序、选择排序
- C++三种排序,快速排序、选择排序、冒泡排序----简单代码
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- Scala冒泡排序、快速排序、插入排序
- 冒泡排序,快速排序,插入排序
- leetcode 27. Remove Element(C语言,快速排序思想,剔除数组中与目标值相等的数)20
- 插入排序、选择排序、冒泡排序、快速排序、堆排序
- 交换排序——冒泡排序和快速排序——C语言描述