在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

算法学习之路,排序之快速排序(Java实现)

2016-8-29 13:26| 发布者: zhangjf| 查看: 609| 评论: 0

摘要: 今天突然想写个排序,以前写过,然后写了之后一直出错,然后自己百度了一下,看了别人写的方法,自己也尝试着写了一个。接下来我来说明快速排序的思路以及实现的代码。 快速排序思路:首先是定义一个变量key,把数组 ...

今天突然想写个排序,以前写过,然后写了之后一直出错,然后自己百度了一下,看了别人写的方法,自己也尝试着写了一个。接下来我来说明快速排序的思路以及实现的代码。

快速排序思路:首先是定义一个变量key,把数组的第一个元素的值赋给key,然后定义两个变量start,end指向数组的第一个元素和最后一个元素。然后从后往前遍历,一直end--,知道下标为end的值小于key,就交换下标为start,end的值,然后再从前遍历,一直start++,直到下标为start的值大于key,就交换下标为start,end的值。这样,经过一次排序之后,小于key的出现在key的左边,大于key的出现在key的右边。然后再用递归对key的左右两边进行上述方法进行排序。

快速排序

代码:

  1. //判断数组是否为空,数组元素是否为0
  2. if (data.length < 1 || data == null) {
  3. return;
  4. }
  5. //头指针小于尾指针,则返回
  6. if (start >= end) {
  7. return;
  8. }
  9. //数组不为空且元素个数大于0
  10. boolean flag = true;
  11. int low = start;
  12. int high = end;
  13. int key = data[low];
  14. while (low < high) {
  15. //flag用来判断是否从下标为high的值与基准进行比较
  16. if (flag) {
  17. if (data[high] < key) {
  18. swmp(data, low, high);
  19. flag = false;
  20. } else {
  21. high--;
  22. }
  23. } else {
  24. //判断下标为low的值是否与基准进行比较。
  25. if (data[low] > key) {
  26. swmp(data, low, high);
  27. flag = true;
  28. } else {
  29. low++;
  30. }
  31. }
  32. }
  33. soft_quick(data, start, low - 1);
  34. soft_quick(data, high + 1, end);
  35. int temp = data[start];
  36. data[start] = data[end];
  37. data[end] = temp;
  38. for (int index : data) {
  39. System.out.print(index + "t");
  40. }
  41. System.out.println();
复制代码

最后是运行结果:

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 00:37

Copyright 2015-2025 djqfx

返回顶部