java排序算法-交换排序
public class ExchangeSortUtils {
// 冒泡
public static void bubbleSort(int[] array) {
int length = array.length;
int temp;
boolean isSort;
for (int i = 1; i < length; i++) {
isSort = false;
for (int j = 0; j < length - i; j++) {
if (array[j] > array[j + 1]) {
// 交换
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isSort = true;
}
}
if (!isSort)
break; // 如果没有发生交换,则退出循环
}
}
public static int getMiddle(int[] arr, int low, int high) {
if (low < high) {
int tmp = arr[low]; // 数组的第一个作为中轴
while (low < high && arr[high] > tmp) {
high--;
}
arr[low] = arr[high]; // 比中轴小的记录移到低端
while (low < high && arr[low] < tmp) {
low++;
}
arr[high] = arr[low]; // 比中轴大的记录移到高端
arr[low] = tmp; // 中轴记录到尾
}
return low; // 返回中轴的位置
}
public static int getMiddle2(int[] arr, int low, int high) {
int tmp = arr[low]; // 数组的第一个作为中轴
while (low < high) {
while (low < high && arr[high] > tmp) {
high--;
}
arr[low] = arr[high]; // 比中轴小的记录移到低端
while (low < high && arr[low] < tmp) {
low++;
}
arr[high] = arr[low]; // 比中轴大的记录移到高端
}
arr[low] = tmp; // 中轴记录到尾
return low; // 返回中轴的位置
}
//快速排序
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int middle = getMiddle(arr, low, high); // 将arr数组进行一分为二
quickSort(arr, low, middle - 1); // 对低字表进行递归排序
quickSort(arr, middle + 1, high); // 对高字表进行递归排序
}
}
public static void main(String[] args) {
quickSortTest();
bubbleSortTest();
}
private static void quickSortTest() {
int[] sortArray = { 5, 2, 4, 1, 3 };
System.out.print("快速排序前: ");
Utils.printArray(sortArray);
quickSort(sortArray, 0, sortArray.length - 1);
System.out.print("快速排序后: ");
Utils.printArray(sortArray);
}
private static void bubbleSortTest() {
int[] sortArray = { 5, 2, 4, 1, 3 };
System.out.print("冒泡排序前: ");
Utils.printArray(sortArray);
bubbleSort(sortArray);
System.out.print("冒泡排序后: ");
Utils.printArray(sortArray);
}
}
java排序算法-交换排序的更多相关文章
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(五):快速排序
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- java排序算法(十):桶式排序
java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- java排序算法(七):折半插入排序
java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...
- java排序算法(六):直接插入排序
java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...
随机推荐
- Java 图片与byte数组互相转换
//图片到byte数组 public byte[] image2byte(String path){ byte[] data = null; FileImageInputStream input = ...
- COGS 859. 数列
/* 先来说一下第一眼看到想出的奇葩方法23333.. 找每个数左右有几个比他小的 前几天刚学了区间第k小的求法 然后... 枚举中间的那个点 对于左区间 二分找到他是第几大 右区间同理 然后 *起来 ...
- javascript MD5加密
/* * Javascript MD5 library - version 0.4 * * Coded (2011) by Luigi Galli - LG@4e71.org - * http://f ...
- javascript中this的解析
在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this ...
- css.day.05.eg
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- project facet java version 1.6 is not supported
可能你用的jdk1.5的包,而开发是用的jdk1.6,不允许1.5进行安装 法1,选中项目 Properties , 选择 Project Facets,右击选择 Java , Change Vers ...
- (转)PHP正则表达式的快速学习方法
1.入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或 ...
- (转)一步一步学习PHP(5)——类和对象
OO的强大我不想再多说,如果你不认同OO,那么当你放眼当前流行的语言,有哪个又不支持OO的,也许这个很有说服力了吧. 在这一节中,我们就来看看在PHP中如何创建一个类和对象. 1. 创建类 在PHP中 ...
- underscorejs-map学习
2.2 map 2.2.1 语法: _.map(list, iteratee, [context]) 2.2.2 说明: 对集合的每个成员依次进行某种操作,将返回的值依次存入一个新的数组.接收3个参数 ...
- JavaScript奇技淫巧44招
JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...