最开始的代码

我采用的是我原来进行快速排序所用的方法,一直做不出来。

为什么我会采用原来快速排序的方法?因为我的记忆中好像就是这样的,因此我根据记忆中的快速排序在进行改变,然而,却无法真正的写出双冒泡排序算法,所以,真正的学习是,即使随着时间的流逝,你已经不记得某些东西了,但是,你可以凭借理解在重新写出来。

  1. public static void sort(int[] num, int l, int r) {
  2. int i = l;
  3. int j = l + 1;
  4. int key = num[l];
  5. while () {
  6. while (num[j] > key)
  7. j++;
  8. if (j < r)
  9. num[i] = num[j];
  10. while (i < j && num[i] < key)
  11. i++;
  12. if (i < j)
  13. num[j++] = num[i];
  14. }
  15. num[i] = key;
  16. for (int n : num)
  17. System.out.print(n + " ");
  18. }

改良后的

快速排序法(双冒泡排序法)

冒泡排序 - 维基百科,自由的百科全书

  1. public static void sort(int[] num, int l, int r) {
  2. if (l < r) {
  3. int i = l;
  4. int j = l + 1;
  5. while (j < r) {
  6. if (num[j] < num[l]) {
  7. i++;
  8. int temp = num[i];
  9. num[i] = num[j];
  10. num[j] = temp;
  11. }
  12. j++;
  13. }
  14. //System.out.println(i);
  15. int temp = num[i];
  16. num[i] = num[l];
  17. num[l] = temp;
  18. sort(num, l, i);
  19. sort(num, i + 1, r);
  20. }
  21. }

大数据排序

当我将数组大小增大到3000000后,出现异常。

十道海量数据处理面试题与十个方法大总结

交换两个数

java 没有指针,所以不可以使用swap函数进行交换,采用下面的方式

  1. int temp = num[i];
  2. num[i] = num[j];
  3. num[j] = temp;

也有其他的方式:

交换两个整数的三种实现方法(C/C++)

单链表的排序

通过尾插法建立一个单链表,然后进行双冒泡排序

  1. class Student {
  2. int num;
  3. Student next;
  4. }
  5. public class LinkedList {
  6. public static void main(String[] args) {
  7. Student head = null;
  8. for (int i = 1; i <= 50; i++) {
  9. head = addBack(head, (int) (Math.random() * 100));
  10. }
  11. show(head);
  12. sort(head, null);
  13. System.out.println();
  14. show(head);
  15. }
  16. public static Student addBack(Student head, int num) {
  17. Student newStudent = new Student();
  18. newStudent.num = num;
  19. newStudent.next = null;
  20. Student student = head;
  21. if (head == null) {
  22. head = newStudent;
  23. return head;
  24. }
  25. while (student.next != null) {
  26. student = student.next;
  27. }
  28. student.next = newStudent;
  29. return head;
  30. }
  31. public static void show(Student student) {
  32. while (student != null) {
  33. System.out.println(student.num);
  34. student = student.next;
  35. }
  36. }
  37. public static void sort(Student start, Student end) {
  38. if (start != end) {
  39. Student p1 = start;
  40. Student p2 = p1.next;
  41. while (p2 != end) {
  42. if (p2.num < start.num) {
  43. p1 = p1.next;
  44. int temp = p1.num;
  45. p1.num = p2.num;
  46. p2.num = temp;
  47. }
  48. p2 = p2.next;
  49. }
  50. int temp = p1.num ;
  51. p1.num =start.num ;
  52. start.num =temp;
  53. sort(start, p1);
  54. sort(p1.next, null);
  55. }
  56. }
  57. }

Java - 双冒泡法排序的更多相关文章

  1. Java温故而知新-冒泡法排序

    冒泡法排序是各种初学者在学习数组与循环结构时都会练习的一种简单排序算法. 冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑. 想像一下倒在一个透明玻璃 ...

  2. 【Java基础】选择排序、冒泡法排序、二分法查找

    1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...

  3. [python,2018-01-15] 冒泡法排序

    想写一个冒泡法排序,没什么思路,就先写了个java的 public static void main(String[] args) { int array[] = {88,2,43,12,34,8,6 ...

  4. 8. 冒泡法排序和快速排序(基于openCV)

    一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...

  5. Python 冒泡法排序

    def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...

  6. C#冒泡法排序源码

    如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j ...

  7. C语言 · 冒泡法排序

    算法提高 冒泡法排序   时间限制:1.0s   内存限制:512.0MB      输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...

  8. C程序数组算法 — 冒泡法排序【前冒 || 后冒】

    第一种写法(前冒泡): /* C程序数组算法 - 冒泡法排序 * 此例子按照 大 -> 小 排序 * 原理:两两相比较,然后进行大小对调 * 比较次数: n^2 次 * 说明:冒泡排序是相对稳定 ...

  9. 冒泡法排序_c++实现

    看完了郝斌老师的c语言视频,冒泡法排序,就试着写了.我觉得学习算法最重要的不是代码,而是它的原理. 代码: /** 2 * Copyright (c) 1991 - 2016 Arvin Tang. ...

随机推荐

  1. 关于FPGA的一些你必须知道的概念

    前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致.可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与T ...

  2. 数据库系统的基本概念(第一章)-----数据库管理系统(DBMS

    DBMS的工作模式 数据库管理系统(DBMS)是指数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分,对数据库的一切操作(增删改查)都是通过DBMS进行的 DBMS的工作模式如下: 1 ...

  3. 如何调用sklearn模块做交叉验证

    终于搞明白了如何用sklearn做交叉验证!!! 一般在建立完模型之后,我们要预测模型的好坏,为了试验的可靠性(排除一次测试的偶然性)我们要进行多次测试验证,这时就要用交叉验证. sklearn中的s ...

  4. poj1830:开关问题

    链接:http://poj.org/problem?id=1830 某天“佐理慧学姐”突然来问了我这道题. 诶,窝只会线性基,但是好像搞不了方案数啊…… 啃题解吧. woc!线性代数哦,就是那种我不会 ...

  5. 【Java学习笔记之三】java中的变量和常量

    变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量. 在实际的程序中,可以根据 ...

  6. poj_2195Going Home(最小费用最大流)

    poj_2195Going Home(最小费用最大流) 标签: 最小费用最大流 题目链接 题意: 有n*m的矩阵,H表示这个点是一个房子,m表示这个点是一个人,现在每一个人需要走入一个房间,已经知道的 ...

  7. android企业级商城源码、360°全景图VR源码、全民直播源码等

    Android精选源码 [新版]Android技术博客精华汇总 开源了:乐乐音乐5.0-Android音乐播放器 android实现仿真水波纹效果源码 360°全景图VR,这是一个值得把玩的APP a ...

  8. Video Target Tracking Based on Online Learning—TLD多目标跟踪算法

    TLD算法回顾 TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间(long ter ...

  9. 基于Echarts4.0实现旭日图

    昨天Echarts4.0正式发布,随着4.0而来的是一系列的更新,挑几个主要的简单说明: 1.展示方面通过增量渲染技术(4.0+)ECharts 能够展现千万级的数据量 2.针对移动端优化,移动端小屏 ...

  10. 【Linux搭建创建FTP服务器】---完美解决 - 费元星

    配置大红字文件置顶:   vsftp d.conf 4.5KB     useradd -d /home/bai_du -s /sbin/nologin bai_du 修改访问权限: usermod ...