Java 常用排序算法实现--快速排序、插入排序、选择、冒泡

//二分查找算法
public static int branchSearch(int[] array, int searchNum) {
if (array == null)
throw new NullPointerException("Null Referrence");
if (array.length == 0)
throw new IllegalArgumentException("Array Length is Zero");
int low = 0, high = array.length;
int middle = (high + low) / 2;
int index = -1;
if (searchNum <</span> array[0] || searchNum > array[array.length - 1])
return index;
while (middle >= 0) {
if (array[middle] == searchNum) {
index = middle;
break;
}
if (searchNum > array[middle]) {
low = middle;
} else {
high = middle;
}
middle = (low + high) / 2;
}
return index;
}
// 快速排序
public static void quickSort(int a[], int left, int right) {
int i, j, temp;
i = left;
j = right;
if (left > right)
return;
temp = a[left];
while (i != j)
{
while (a[j] >= temp && j > i)
j--;
if (j > i)
a[i++] = a[j];
while (a[i] <= temp && j > i)
i++;
if (j > i)
a[j--] = a[i];
}
a[i] = temp;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}
// 插入排序
// 特点:用temp保存将要排序的临时值,然后把大的值插入到这个位置。
public static int[] insert_Sort(int[] array) {
int i, j, temp;
for (i = 1; i <</span> array.length; i++) {
for (j = i, temp = array[i]; j > 0 && temp <</span> array[j - 1]; j--)
array[j] = array[j - 1];
array[j] = temp;
}
return array;
}
// 冒泡排序
// 特点:从第一个元素开始,如果需要交换,就一直冒泡到底,如果不需要交换,就从下一个元素开始比较
public void bubble_Sort(int[] array, int size) {
int i, j, temp;
for (i = size - 1; i > 1; i--)
for (j = 0; j <</span> i; j++)
if (array[j] > array[j + 1]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
// 交换排序
// 特点:始终是第一个元素与其他元素一一比较,交互后,继续用第一个元素与后面元素一一比较,重复下去。
public int[] change_Sort(int[] array, int size) {
int i, j, temp;
for (i = 0; i <</span> size; i++)
for (j = i + 1; j <</span> size; j++)
if (array[i] > array[j]) {
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
return array;
}
// 选择排序一(便于区分:咱就叫:选择最小值排序法)
// 特点:分有序区(第一个元素)和无序区(除第一元素外的元素),从无序区找出最小的元素移动到有序区
public void SelectSort(int[] array) {
int i, j, k;// 分别为有序区,无序区,无序区最小元素指针
for (i = 0; i <</span> array.length; i++) {
k = i;
for (j = i + 1; j <</span> array.length; j++) {
if (array[j] <</span> array[k])
k = j;
}
if (k != i)// 若发现最小元素,则移动到有序区
{
int temp = array[k];
array[k] = array[i];
array[i] = array[temp];
}
}
}
// 选择排序二
public int[] select_Sort(int[] array, int size) {
int i, j, temp, pos;
for (i = 0; i <</span> size; i++) {
for (j = i + 1, temp = array[i], pos = i; j <</span> size; j++)
if (temp > array[j]) {
temp = array[j];
pos = j;
}
array[pos] = array[i];
array[i] = temp;
}
return array;
}
//希尔排序
// 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
// 排序过程:先取一个正整数d1
// 然后取d2
public static void ShellSort(int[] array) {
int length = array.length;
for (int h = length / 2; h > 0; h = h / 2) {
// here is insert sort
for (int i = h; i <</span> length; i++) {
int temp = array[i];
if (temp <</span> array[i - h]) {
for (int j = 0; j <</span> i; j += h) {
if (temp <</span> array[j]) {
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
}
}
}
}

Java 常用排序算法实现--快速排序、插入排序、选择、冒泡的更多相关文章
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之直接插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之快速排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 常用排序算法之——快速排序(C语言+VC6.0平台)
经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...
- [转]Java 常用排序算法/程序员必须掌握的 8大排序算法
本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插 ...
- <转>Java 常用排序算法小记
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...
随机推荐
- 019 关联映射文件中集合标签中的lazy(懒加载)属性
<set>.<list>集合上,可以取值:true/false/extra,(默认值为:true) 实例一:(集合上的lazy=true(默认))class默认lazy=tru ...
- struts2.1.6教程十、类型转换
建立struts2conversion项目,并搭建好struts2的基本开发环境 1.基于Action的直接属性转换 建立t.jsp页面,内容如下: <s:form action="p ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
- CentOS7下配置网络yum源(附带下载地址)
一.查看外网是否通畅 配置网络yum源(需要保证外网开通,我这里是使用网易163提供开源镜像站) 二.下载repo文件 cd /etc/yum.repos.dwget http://mirrors.1 ...
- UICollectionView左对齐流水布局、右对齐流水布局
在平时使用的app中会经常碰到一些规格选择,筛选,标签等页面,这些页面的布局展示通常是左对齐流水布局.实现类似这样的左对齐流水布局有多种方式,如果选项少的话可以直接用UIButton实现.现在我们有一 ...
- python爬虫从入门到放弃(四)之 Requests库的基本使用
什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...
- JavaSE教程-04Java中循环语句for,while,do···while
** Java的循环语句 ** 引入: 生活中有循环,程序的世界也有循环. 思考:生活中有哪些循环的事情? 总结:什么是循环? 重复做类似的事情,而且有终止条件,如果没有终止条件会是怎样? 类似这样的 ...
- python 创建mysql数据库
昨天用shell脚本创建数据库,涉及java调用,比较折腾,改用python直接创建数据库,比较方便,好了,直接上代码,相关注释也添加了 # _*_encoding:UTF-8_*_import My ...
- springboot问题:解决异常Unable to start embedded container;
使用eclipse创建springboot练习时,当主函数与控制器同时写在同一个类时,启动项目正常运行,而当把主函数单独放在一个类中时,无论是与控制器同包还是控制器所在的包是其子包,都报: org.s ...
- Myeclipse8.6注册机代码,不用到处找注册机了
import java.io.*; public class MyEclipseGen { private static final String LL = "Decompiling thi ...