Java - 双冒泡法排序
最开始的代码
我采用的是我原来进行快速排序所用的方法,一直做不出来。
为什么我会采用原来快速排序的方法?因为我的记忆中好像就是这样的,因此我根据记忆中的快速排序在进行改变,然而,却无法真正的写出双冒泡排序算法,所以,真正的学习是,即使随着时间的流逝,你已经不记得某些东西了,但是,你可以凭借理解在重新写出来。
public static void sort(int[] num, int l, int r) {
int i = l;
int j = l + 1;
int key = num[l];
while () {
while (num[j] > key)
j++;
if (j < r)
num[i] = num[j];
while (i < j && num[i] < key)
i++;
if (i < j)
num[j++] = num[i];
}
num[i] = key;
for (int n : num)
System.out.print(n + " ");
}
改良后的
public static void sort(int[] num, int l, int r) {
if (l < r) {
int i = l;
int j = l + 1;
while (j < r) {
if (num[j] < num[l]) {
i++;
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
j++;
}
//System.out.println(i);
int temp = num[i];
num[i] = num[l];
num[l] = temp;
sort(num, l, i);
sort(num, i + 1, r);
}
}
大数据排序
当我将数组大小增大到3000000后,出现异常。
十道海量数据处理面试题与十个方法大总结
交换两个数
java 没有指针,所以不可以使用swap函数进行交换,采用下面的方式
int temp = num[i];
num[i] = num[j];
num[j] = temp;
也有其他的方式:
交换两个整数的三种实现方法(C/C++)
单链表的排序
通过尾插法建立一个单链表,然后进行双冒泡排序
class Student {
int num;
Student next;
}
public class LinkedList {
public static void main(String[] args) {
Student head = null;
for (int i = 1; i <= 50; i++) {
head = addBack(head, (int) (Math.random() * 100));
}
show(head);
sort(head, null);
System.out.println();
show(head);
}
public static Student addBack(Student head, int num) {
Student newStudent = new Student();
newStudent.num = num;
newStudent.next = null;
Student student = head;
if (head == null) {
head = newStudent;
return head;
}
while (student.next != null) {
student = student.next;
}
student.next = newStudent;
return head;
}
public static void show(Student student) {
while (student != null) {
System.out.println(student.num);
student = student.next;
}
}
public static void sort(Student start, Student end) {
if (start != end) {
Student p1 = start;
Student p2 = p1.next;
while (p2 != end) {
if (p2.num < start.num) {
p1 = p1.next;
int temp = p1.num;
p1.num = p2.num;
p2.num = temp;
}
p2 = p2.next;
}
int temp = p1.num ;
p1.num =start.num ;
start.num =temp;
sort(start, p1);
sort(p1.next, null);
}
}
}
Java - 双冒泡法排序的更多相关文章
- Java温故而知新-冒泡法排序
冒泡法排序是各种初学者在学习数组与循环结构时都会练习的一种简单排序算法. 冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑. 想像一下倒在一个透明玻璃 ...
- 【Java基础】选择排序、冒泡法排序、二分法查找
1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...
- [python,2018-01-15] 冒泡法排序
想写一个冒泡法排序,没什么思路,就先写了个java的 public static void main(String[] args) { int array[] = {88,2,43,12,34,8,6 ...
- 8. 冒泡法排序和快速排序(基于openCV)
一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...
- Python 冒泡法排序
def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...
- C#冒泡法排序源码
如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j ...
- C语言 · 冒泡法排序
算法提高 冒泡法排序 时间限制:1.0s 内存限制:512.0MB 输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...
- C程序数组算法 — 冒泡法排序【前冒 || 后冒】
第一种写法(前冒泡): /* C程序数组算法 - 冒泡法排序 * 此例子按照 大 -> 小 排序 * 原理:两两相比较,然后进行大小对调 * 比较次数: n^2 次 * 说明:冒泡排序是相对稳定 ...
- 冒泡法排序_c++实现
看完了郝斌老师的c语言视频,冒泡法排序,就试着写了.我觉得学习算法最重要的不是代码,而是它的原理. 代码: /** 2 * Copyright (c) 1991 - 2016 Arvin Tang. ...
随机推荐
- python抢火车票的脚本
起因: 想着那么多人,抢不到火车票.感觉到一丝感慨 所以有了抢火车票这个脚本. 0x01 思路:自动打开浏览器,自动输入账号密码 知道查看.自动预定. 0x02 要用到的模块 splinter模块: ...
- JavaScript拆分字符串并将分割的数据放到数组中
1 2 3 4 5 6 7 var splitArray = new Array(); var string="太平洋.大西洋.印度洋.北冰洋"; var regex = /./; ...
- i++是否原子操作?并解释为什么?
都不是原子操作.理由: 1.i++分为三个阶段: 内存到寄存器寄存器自增写回内存这三个阶段中间都可以被中断分离开. 2.++i首先要看编译器是怎么编译的, 某些编译器比如VC在非优化版本中会编译为以 ...
- UEP-标签
这里的标签都是常用不好理解的: formatfunc="showFormatNumer" 显示数字在页面上 ockedcolumnnum="6" 几列是不动的 ...
- [国嵌攻略][158][SPI裸机驱动设计]
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...
- [国嵌攻略][070-095][Linux编程函数手册]
第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 ...
- 自己实现一个each迭代器
什么是迭代器? 其实就是对一个对象内部进行遍历的方法,比如jquery的each方法,或者原生js的foreach方法. 迭代器的特点 针对迭代器,这里有几个特点: ☑ 访问一个聚合对象的内容而无需暴 ...
- 原生JavaScript常用的DOM操作
之前项目一直都是用JQuery或者Vue来做的,确实好用,毕竟帮我们解决了很多浏览器兼容问题,但是后面发现大公司面试题都是要原生Javascript来做,然后我就一脸懵逼哈哈哈,毕竟大公司需要的框架或 ...
- ubuntu 下 apt /apt-get command not found 命令找不到
简介:apt 命令在ubuntu下找不到.(针对云平台,等可联网的ubuntu 如果是虚拟机,请确认能否联网 (如是虚拟机且不能联网请参考其他文章,大致方向是先挂载系统镜像再安装)) (ps:一般的 ...
- Javascript Array 非常用方法解析
在ECMAScript5的Array中已经有了Array.prototype.forEach,Array.prototype.filter,Array.prototype.map等方法 1. map ...