public class Sort {
/**
* 冒泡排序,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序
*/
public static void bubbleSort(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
/**
* 选择排序 ,每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素
*
* @param a
*/
public static void selectSort(int a[]) {
for (int i = 0; i < a.length - 1; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++) {
if (a[min] > a[j]) {
min = j;
}
}
if (min != i) {
int tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
}
}
/**
* 插入排序,插入排序由N-1趟排序组成,对于p=1到N-1趟,插入排序保证从位置0到位置p上的元素为已排序状态
*/
public static void insertionSort(int[] a) {
int i;
for (int j = 1; j < a.length; j++) {
int tmp = a[j];
for (i = j; i > 0 && a[i - 1] > tmp; i--) {
a[i] = a[i - 1];
}
a[i] = tmp;
}
}
/**
* 希尔排序,https://blog.youkuaiyun.com/u013967628/article/details/79831518
*/
public static void shellSort(int a[]) {
int i;
for (int gap = a.length / 2; gap > 0; gap /= 2) {
for (int j = gap; j < a.length; j++) {
int tmp = a[j];
for (i = j; i >= gap && a[i - gap] > tmp; i -= gap) {
a[i] = a[i - gap];
}
a[i] = tmp;
}
}
}
/**
* 快速排序
*/
public static void quickSort(int a[], int left, int right) {
if (left > right) {
return;
}
int temp = a[left];
int i = left;
int j = right;
while (i != j) {
while (a[j] >= temp && i < j) {
j--;
}
while (a[i] <= temp && i < j) {
i++;
}
if (i < j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}
public static void main(String[] args) {
int a[] = { 34, 8, 64, 51, 32, 21 };
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
}
}