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排序算法-交换排序的更多相关文章

  1. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  2. java排序算法(五):快速排序

    java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...

  3. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  4. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  5. java排序算法(十):桶式排序

    java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...

  6. java排序算法(九):归并排序

    java排序算法(九):归并排序

  7. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

  8. java排序算法(七):折半插入排序

    java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...

  9. java排序算法(六):直接插入排序

    java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...

随机推荐

  1. Wpf控件ListBox使用实例2

    2.Xaml绑定选择结果 <StackPanel Orientation="Vertical"> <TextBlock Margin="10,10,10 ...

  2. Eclipse4.4安装旧版本插件报错 Failed to prepare partial IU

    Failed to prepare partial IU: [R]com.googlecode.veloeclipse.ui 2.0.8. work around: go to Help -> ...

  3. jquery动画总结

    基本动画 show() //直接显示元素,没有动画 show(speed, [callback]) //有动画,有回调函数 hide() //直接隐藏元素,没有动画 hide(speed, [call ...

  4. Spring和CXF整合时报Unsupported major.minor version 51.0异常

    好吧,官网上有写:The current plan is that CXF 3.1 will no longer support Java 6 and will require Java 7 or n ...

  5. ubuntu下apache与php配置

    实验环境 uname -a Linux tomato 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_6 ...

  6. 【BZOJ1901】Dynamic Rankings

    Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是 ...

  7. 页面添加 mask 遮罩层

    var mask = function(){ $('<div>').css({ position: 'fixed', left: 0, top: 0, width: '100%', hei ...

  8. jQuery实现checkbox全选反选及删除等操作

    1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...

  9. python 文件系统

  10. (转)ligerUI 使用教程之Tip介绍与使用

    概述:   ligertip是ligerUI系列插件中的tooltip类插件,作用是弹一个浮动层,起提示作用   阅读本文要求具备jQuery的基本知识,不然文中的javascript代码不易理解 截 ...