## 排序算法比较 原

f
fang_faye

1、二分查找排序

public class SortInHalf {

public static void main(String[] args) {
int[] arrays = {12,3,45,6,1,34,2,5,8};
HalfSort(arrays);
}
/**
* 二分查找排序方法
* @param arrays
*/
public static void HalfSort(int[] arrays) {
int sign = 1;
int start = 0;
int end = 0;
int half = 0;
int tempint = 0;
while(sign<arrays.length) {
start = 0;
end = sign-1;
tempint = arrays[sign];
while(start<=end) {
half = (start+end)/2;
if(tempint>=arrays[half]) {
start = half+1;
}else {
end = half-1;
}
}
Move(arrays, sign, start);
PrintoutForASort(arrays,sign);
sign++;
}
}
/**
* 将数组从sign-1位置开始，以此向后挪动一位
* @param arrays
* @param sign
* @param target
*/
public static void Move(int[] arrays,int sign,int target) {
int x = arrays[sign];
for(int i=sign-1;i>=target;i--) {
arrays[i+1]=arrays[i];
}
arrays[target]=x;
}
/**
* 输出数组内容
* @param arrays
* @param sign
*/
public static void PrintoutForASort(int[] arrays,int sign) {
System.out.print("第"+sign+"次排序结果：");
for(int i=0;i<arrays.length;i++) {
System.out.print(arrays[i]+",");
}
System.out.println();
}
}

2、快速排序

public class SortInQuick {
private static int sign = 1;
public static void main(String[] args) {
int[] arrays = {12,3,45,6,1,34,2,5,8};
int start = 0;
int end = arrays.length-1;
quicksort(arrays, start, end);
}
/**
* 快速排序
* @param arrays
* @param start
* @param end
*/
public static void quicksort(int[] arrays, int start, int end) {
if(start>end) {return;}
int signi = start;
int signj = end;
int target = arrays[start];
while(signi<signj) {
while(arrays[signj]>=target&&signi<signj) {
signj--;
}
while (arrays[signi]<=target&&signi<signj) {
signi++;
}
if(signi<signj) {
exchange(arrays, signi, signj);
}
}

exchange(arrays, start, signi);
PrintoutForASort(arrays);
quicksort(arrays, signi+1, end);
quicksort(arrays, start, signi-1);
}
/**
* 交换数组arrays中位置i和j的内容
* @param arrays
* @param i
* @param j
*/
public static void exchange(int[] arrays, int i, int j) {
int temp = 0;
temp = arrays[i];
arrays[i] = arrays[j];
arrays[j] = temp;
}

/**
* 输出数组内容
* @param arrays
* @param sign
*/
public static void PrintoutForASort(int[] arrays) {
System.out.print("第"+sign+"次排序结果：");
for(int i=0;i<arrays.length;i++) {
System.out.print(arrays[i]+",");
}
System.out.println();
sign++;
}
}

3、归并排序
public class SortInMerger {

private static int sign = 0;
public static void main(String[] args) {
int[] arrays = {12,3,45,6,1,34,2,5,8};
int start = 0;
int end = arrays.length-1;
merge(arrays, start, end);
}

/**
* 将一个序列递归划分为最小单元，再进行排序
* 当一个序列只有0个或者1个元素时便可认为是有序序列
* @param arrays
*/
public static void merge(int[] arrays, int start, int end) {
if(start>=end) {return;}
int mid = (start+end)/2;
merge(arrays, start, mid);
merge(arrays, mid+1, end);
mergesort(arrays, start, mid, end);
PrintoutForASort(arrays);
}

/**
* 对划分后的两个有序序列进行归并排序
* @param arrays
* @param start
* @param mid
* @param end
*/
public static void mergesort(int[] arrays, int start, int mid, int end) {
if(start>=end) {
return;
}
int i = 0;
int j = 0;
int k = start;
int[] temparrays = new int[arrays.length];
for(i=start;i<=end;i++) {
temparrays[j]=arrays[i];
j++;
}
j = mid - start + 1;
i = 0;
while(i<=mid-start&&j<=end-start) {
if(temparrays[i]<=temparrays[j]) {
arrays[k] = temparrays[i];
i++;
}else {
arrays[k] = temparrays[j];
j++;
}
k++;
}
while(i<=mid-start) {
arrays[k] = temparrays[i];
i++;
k++;
}
while(j<=end-start) {
arrays[k] = temparrays[j];
j++;
k++;
}
}

/**
* 输出数组内容
* @param arrays
*/
public static void PrintoutForASort(int[] arrays) {
System.out.print("第"+sign+"次排序结果：");
for(int i=0;i<arrays.length;i++) {
System.out.print(arrays[i]+",");
}
System.out.println();
sign++;
}
}

4、三种方法时间消耗对比

ps:每次运行消耗的时间都不同~所以以上结果仅做参考
---------------------------分割线，再更新---------------------------

public class SortInHeap {
private static int sign = 1;
public static void main(String[] args) {
int[] arrays = {12,3,45,6,1,34,2,5,8};
heapsort(arrays);
}
/**
* 堆排序过程
* @param arrays
*/
public static void heapsort(int[] arrays) {
int range = arrays.length-1;
for(;range>=0;range--) {
exchange(arrays, range, 0);
PrintoutForASort(arrays);
}
}
/**
* 大顶堆调整过程
* @param arrays
* @param range
*/
public static void adjust(int[] arrays, int range) {
}
}
}
}
/**
* 交换数组arrays中位置i和j的内容
* @param arrays
* @param i
* @param j
*/
public static void exchange(int[] arrays, int i, int j) {
int temp = 0;
temp = arrays[i];
arrays[i] = arrays[j];
arrays[j] = temp;
}
/**
* 输出数组内容
* @param arrays
*/
public static void PrintoutForASort(int[] arrays) {
System.out.print("第"+sign+"次排序结果：");
for(int i=0;i<arrays.length;i++) {
System.out.print(arrays[i]+",");
}
System.out.println();
sign++;
}
}

f

### fang_faye

#### 暂无文章

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单（2019）请戳（这里） 【今日歌曲】 @凉小生 ：#今日歌曲推荐# 少点戾气，愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

1K
12
Excption与Error包结构，OOM 你遇到过哪些情况，SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类，Throwable 包含两个子类，Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常（checked Exc...

Garphy

23
0

FAT_mt

19
0

32
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column，设type属性为selction即可； 2、@selection-change事件：选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing

13
0