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. ...
随机推荐
- MVVM 框架解析之双向绑定
更好的阅读体验,点击 原文地址 MVVM 框架 近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移.在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整个页面,从而 ...
- 数据结构之链表-链表实现及常用操作(C++篇)
数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...
- deeplearning.ai 人工智能行业大师访谈 Pieter Abbeel 听课笔记
1. Pieter Abbeel小时候想做一个篮球运动员 - -!上学的时候喜欢数学和物理,上大学之后很自然的学工程.Pieter定义工程问题是"解决实际中应用物理和数学的问题". ...
- Git分支-分支简介
源地址:https://git-scm.com/book/zh/ch3-1.html 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线 ...
- poj 1743
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 24835 Accepted: 8377 De ...
- HDU 2682 Tree
题目: There are N (2<=N<=600) cities,each has a value of happiness,we consider two cities A and ...
- UE4 径向模糊radiu blur
hlsl代码为: float2 ScreenMult = ; ; ] = {-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08}; float ...
- Arrays类详解
数组是数据结构中最简单的一种类型.在平常的使用上也比较多见.今天就来总结一下数组在使用过程中的一些心得 1.java中包装数组的一些基本用法的抽象类 java.util.Arrays.这个类中包含操 ...
- 如何节省 1TB 图片带宽?解密极致图像压缩
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:Gophery 本文由 腾讯技术工程官方号 发布在云+社区 图像已经发展成人类沟通的视觉语言.无论传统互联网还是移动互联网,图像一直占据着 ...
- FSFS和VDFS存储方式的区别
简单来说这个是VisualSVN基于FSFS文件系统格式扩展的.也就是说,分布式版本管理DVCS兴起之后,大家发现多个仓库的好处了,开始给SVN增加这个功能. 至于FSFS本身是SVN在2004年开始 ...