java 复习003 之排序篇
由java 复习003跳转过来的
C语言实现版见some-sort-algorithms
快速排序(不稳定 O(n log n))
package vell.bibi.sort_algorithms; import vell.bibi.sort_algorithms.util.vell001; public class QuickSort { public static int partition(int[] a, int low, int high){
int cup;
cup = a[low]; // 保存关键字
while(high > low){
while(high > low && a[high] >= cup) high--; // 由high开始找,找到小于关键字的位置
a[low] = a[high];
while(high > low && a[low] <= cup) low ++; // 由low开始找,找到大于关键字的位置
a[high] = a[low];
}
a[low] = cup;
return low;
}
public static void sort(int[] a, int low, int high){
if(high <= low) return;
int mid = partition(a, low, high); // 分成两个区
sort(a, low, mid-1);
sort(a, mid+1, high);
}
public static void main(String[] args) {
int[] a = vell001.getRandomList(10, 100);
vell001.printList(a);
sort(a, 0, a.length-1);
vell001.printList(a);
}
}冒泡排序 (稳定 O(n2))
package vell.bibi.sort_algorithms; import vell.bibi.sort_algorithms.util.vell001; public class BubbleSort { public static void sort(int[] a){
int i, j, cup;
boolean flag;
for(i=a.length, flag=true; flag && i>0; i--){
flag = false;
for(j=0; j<i-1; j++){
if(a[j] > a[j+1]){
cup = a[j];
a[j] = a[j+1];
a[j+1] = cup;
flag = true;
}
}
}
}
public static void main(String[] args) {
int[] a = vell001.getRandomList(10, 100);
vell001.printList(a);
sort(a);
vell001.printList(a);
} }希尔排序(不稳定 O(n log n))
package vell.bibi.sort_algorithms; import vell.bibi.sort_algorithms.util.vell001; public class ShellSort {
public static void sort(int[] a){
int i, j, d, cup;
for(d=a.length/2; d>0; d=d/2){
for(i=d; i<a.length; i++){
cup = a[i];
for(j=i-d; j>=0 && a[j]>cup; j=j-d){
a[j+d] = a[j];
}
a[j+d] = cup;
}
}
}
public static void main(String[] args) {
int[] a = vell001.getRandomList(10, 100);
vell001.printList(a);
sort(a);
vell001.printList(a);
} }堆排序(不稳定 O(n log n))
package vell.bibi.sort_algorithms; import vell.bibi.sort_algorithms.util.vell001; public class HeapSort { public static void heapAdjust(int[] a, int father, int length){
int child, cup;
for(child=father*2+1, cup=a[father]; child<length; father=child, child=father*2+1){
if(child+1 < length && a[child+1] > a[child])
child ++;
if(a[child] > cup){
a[father] = a[child];
a[child] = cup;
} else
break;
}
}
public static void sort(int[] a){
int cup;
for(int i=a.length/2; i>=0; i--){
heapAdjust(a, i, a.length);
}
for(int i=a.length-1; i>0; i--){
cup = a[0];
a[0] = a[i];
a[i] = cup;
heapAdjust(a, 0, i);
}
}
public static void main(String[] args) {
int[] a = vell001.getRandomList(10, 100);
vell001.printList(a);
sort(a);
vell001.printList(a);
} }归并排序(稳定 O(n log n) 需要O(n)额外空间)
package vell.bibi.sort_algorithms; import vell.bibi.sort_algorithms.util.vell001; public class MergeSort {
public static void merge(int[] a, int low, int mid, int high){
int i=low, j=mid, k=0;
int[] cup = new int[high-low];
while(i<mid && j<high){
if(a[i] <= a[j])
cup[k++] = a[i++];
else
cup[k++] = a[j++];
}
while(i<mid) cup[k++] = a[i++];
while(j<high) cup[k++] = a[j++];
for(k=0; k<cup.length; k++){
a[low + k] = cup[k];
}
}
public static void sort(int[] a, int low, int high){
if(high - low <= 1) return;
int mid = (high + low) / 2;
sort(a, low, mid);
sort(a, mid, high);
merge(a, low, mid, high);
} public static void main(String[] args) {
int[] a = vell001.getRandomList(10, 100);
vell001.printList(a);
sort(a, 0, a.length);
vell001.printList(a);
} }vell001.java (我的小工具库)
package vell.bibi.sort_algorithms.util; public class vell001 {
public static void printList(int[] a){
for(int i=0; i<a.length; i++){
System.out.print(a[i] + " ");
}
System.out.println();
}
public static int[] getRandomList(int n, int max){
int[] a = new int[n];
for(int i=0; i<n; i++){
a[i] = (int)(Math.random() * max);
}
return a;
}
}
原文地址: http://vview.ml/2014/04/13/some-sort-algorithms-java.html
written by Vell Bibi posted at VBlog
java 复习003 之排序篇的更多相关文章
- java 复习003
今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- Java有用经验总结--Swing篇
Java有用经验总结--Swing篇 前言 本文前言部分为我的一些感想,假设你仅仅对本文介绍的Java有用技巧感兴趣,能够跳过前言直接看正文的内容. 本文的写作动机来源于近期接给人家帮忙写的一个小程序 ...
- Java面试题之基础篇概览
Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...
- Java面试知识点之线程篇(二)
前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...
- Java面试知识点之线程篇(一)
前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...
随机推荐
- 百度全新的ARM架构服务器,一个2U机箱装6台,每台4个3T硬盘,每个机箱共72TB
1月11日,中国科学院原秘书长.国家科技重大专项国务院咨询评估组专家侯自强,来到百度南京数据中心,和他一起的还有中国工程院院士倪光南以及工业和信息化部电信研究院传输研究所副所长石友康等人.他们看到的是 ...
- 1、Singleton 单件(创建模式)
一.Singleton模式主要应用在一些特殊的类,在整个系统运行中,有且仅有一个实例的场景 二.Singleton模式分为单线程与多线程情况,当然多线程一样适应单线程 单线程:在这种情况下比较容易,因 ...
- IOS刷新数据
在一个项目开发过程中为了更好的体验经常会用到下拉刷新更新数据,当然也伴随一些上拉加载更多数据的情况:当前比较火的EGOTableViewPullRefresh只实现了下拉功能,而没有上拉的功能.这里介 ...
- ffmpeg 2.8.1 最新版本 VS2013 可调式动态库
ffmpeg 2.8.1 最新版本 VS2013 可调式动态库 由于大多数初学者都在想尽各种版本寻求VC编译调试ffmpeg的版本,我也曾经移植过几个版本的ffmpeg到VC上编译.: 链接所需动态库 ...
- Android开发之Okhttp:java.lang.IllegalStateException: closed
在使用Okhttp的时候 运行到response.body().string()一步时抛异常,java.lang.IllegalStateException: closed 查阅各种资料大致意思是Th ...
- git stash 暂存当前修改
当我们在开发项目的时候,突然来一个变更需要修改,我们除了将当前项目提交(commit)后切换(checkout) 到其他分支外,我们还可以先将当前的修改暂存(stash)起来,然后再切换(checko ...
- 1493: [NOI2007]项链工厂
线段树. 真还就是个线段树.. 除去操作1,2的话,线段树很容易就处理了,问题在于如何处理操作1和2.(这点没想到).. 我们用一个delta维护操作1,如果没有旋转就+k,不然就-k. 每次读入i和 ...
- [反汇编练习] 160个CrackMe之011
[反汇编练习] 160个CrackMe之011. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- Java [leetcode 4] Median of Two Sorted Arrays
问题描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of t ...
- zoj 2027 Travelling Fee
// 题意 : 一个人要去旅行 给你起点和终点 求最少花费 其中花费为经过路径的总费用减去该路径的中的最大花费段// 直接搜索 稍微加了个剪枝 主要是数据规模小#include <iostrea ...