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 ...
随机推荐
- 请输出in.txt文件中的2 4 6 8 9 10 12行
in.txt文件: 学号 姓名 性别 年龄 1001 张三 男 18 1002 赵四 男 19 1003 李丽 女 18 1004 刘芳 女 32 1005 王五 男 54 1006 小明 男 32 ...
- 提升升级 强制更新 Download
Activity和广播 /** 下载APK细节 1.点击升级后对话框不消失,再次点击时不能重复下载 2.下载过程中退出APP,下次进入应用后要重新下载(因为可能不完整) 3.下载过程中退出APP(或下 ...
- ie下面兼容性问题的一些总结
最后一次搞ie兼容性问题,以后都可以不管了0.0 1.浮动兼容性 1.1IE6下的双边距BUG 在IE6下,块元素有浮动和横向margin的时候,最边上元素的横向margin值会被放大成两倍 解决办法 ...
- NHibernate执行原生带sum的sql
可以自行查出想要的字段,并且返回的是model类型,可以点出所有的字段. 但是select 后面的字段名 必须有xml的字段名一模一样. ISession iSession = null; strin ...
- Objective-C 类,函数调用
// // main.m // L02HelloObjC // // Created by JinXin on 15/11/25. // Copyright © 2015年 JinXin. All r ...
- Swift - 26 - 函数的基础写法
//: Playground - noun: a place where people can play import UIKit // 无参无返回 // -> Void可以省略不写, 或者写成 ...
- Protostuff自定义序列化(Delegate)解析
背景 在使用Protostuff进行序列化的时候,不幸地遇到了一个问题,就是Timestamp作为字段的时候,转换出现问题,通过Protostuff转换后的结果都是1970-01-01 08:00:0 ...
- SAS学习笔记
一. 在SAS中进行随机抽样: 1. 在实际数据处理中常常需要进行样本抽样,在实践中主要有两种情况: (1)简单无重复抽样(2)分层抽样 a.等比例分层抽样 b. 不等比例 ...
- OpenGL画图旋转
#include<gl/glut.h>#include<gl/GL.h>#include<gl/GLU.h>#include<math.h>#inclu ...
- 关闭iOS的自动更新
Safari打开网址https://oldcat.me/web/NOOTA9.mobileconfig,安装描述文件,就不会自动下载和提示更新最新的iOS了