package cn.com.javatest.sort;
import org.apache.commons.lang3.StringUtils;
/**
* 常用排序方法
*
* @author: Rodge
* @time: 2018年10月4日 下午5:16:22
* @version: V1.0.0
*/
public class SortTest {
/**
* 冒泡排序:比较相邻的元素,如果第一个比第二个大,则交换位置。
* @param numbers
*/
public static void bubbleSort(int[] numbers) {
int temp; //中间变量
int size = numbers.length; //数组长度
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (numbers[i] > numbers[j]) {
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}
/**
* 快速排序:从数列中挑出一个元素,称为“基准”,
* 重新排序所有元素比基准小的摆放在其前面,反之在后面。
* @param numbers
* @param start
* @param end
*/
public static void quickSort(int[] numbers, int start, int end) {
if (start < end) {
int base = numbers[start]; //第一个数作为基准
int temp; //中间变量
int i = start, j = end;
do {
while (numbers[i] < base && i < end) {
i ++;
}
while (numbers[j] > base && j > start) {
j --;
}
if (i <= j) {
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
i ++;
j --;
}
} while (i <= j);
if (start < j) {
quickSort(numbers, start, j);
}
if (end > i) {
quickSort(numbers, i, end);
}
}
}
/**
* 选择排序:在未排序序列中找到最小元素,存放在起始位置。
* @param numbers
*/
public static void selectSort(int[] numbers) {
int size = numbers.length;
int temp;
for (int i = 0; i < size; i++) {
int k = i;
for (int j = size - 1; j > i; j--) {
if (numbers[j] < numbers[k]) {
k = j;
}
}
temp = numbers[i];
numbers[i] = numbers[k];
numbers[k] = temp;
}
}
/**
* 插入排序:从第一个元素开始,取出下一元素,如果元素大于下一元素,则交换位置。
* @param numbers
*/
public static void insertSort(int[] numbers) {
int size = numbers.length;
int temp;
int j;
for (int i = 0; i < size; i++) {
temp = numbers[i];
for (j = i; j > 0 && temp < numbers[j-1]; j--) {
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
}
/**
* Java8 Arrays.sort()
* @param numbers
*/
public static void sort(int[] numbers) {
Arrays.sort(numbers);
}
/**
* Java8 Arrays.parallelSort()
* @param numbers
*/
public static void parallelSort(int[] numbers) {
Arrays.parallelSort(numbers);
}
public static void main(String[] args) {
int numbers[] = {23,4,54,12,34,56,3,24,5,88,10,22,100,76};
// bubbleSort(numbers);
// quickSort(numbers, 0, numbers.length-1);
// selectSort(numbers);
// insertSort(numbers);
// String str = StringUtils.join(numbers, ' ', 0, numbers.length);
// System.err.println(str);
// sort(numbers);
// System.err.println(Arrays.toString(numbers));
parallelSort(numbers);
System.err.println(Arrays.toString(numbers));
}
}