📄 sort.java
字号:
package sort_source;
public class Sort {
/*public static void main(String args[]) {
int[] data = new int[] { 10, 2, 30, 10, -10, 34, 29, 59, 8, 26 };
// selection_sort(data);
//insert_sort(data);
//bubble_sort(data);
//quick_sort(data);
//merge_sort(data);
heap_sort(data);
}*/
// 选择排序
public void selection_sort(int[] data) {
int out, in, min;
int n = data.length;
for (out = 0; out < n - 1; out++) // outer loop
{
min = out; // minimum
for (in = out + 1; in < n; in++)
if (data[in] < data[min]) // if min greater,
min = in; // a new min
swap(data, out, min); // swap them
}
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
private void swap(int[] a, int one, int two) {
int temp = a[one];
a[one] = a[two];
a[two] = temp;
}
// 插入排序:
public void insert_sort(int[] data) {
int n=data.length ;
for (int i = 1; i < data.length; i++) {
for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
// 冒泡排序:
public void bubble_sort(int[] data) {
int n=data.length ;
for (int i = 0; i < data.length; i++) {
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[j - 1]) {
swap(data, j, j - 1);
}
}
}for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
// 快速排序
public void quick_sort(int[] data) {
quickSort(data, 0, data.length - 1);
int n=data.length;
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
private void quickSort(int[] data, int i, int j) {
int pivotIndex = (i + j) / 2;
// swap
swap(data, pivotIndex, j);
int k = partition(data, i - 1, j, data[j]);
swap(data, k, j);
if ((k - i) > 1)
quickSort(data, i, k - 1);
if ((j - k) > 1)
quickSort(data, k + 1, j);
}
private int partition(int[] data, int l, int r, int pivot) {
do {
while (data[++l] < pivot)
;
while ((r != 0) && data[--r] > pivot)
;
swap(data, l, r);
} while (l < r);
swap(data, l, r);
return l;
}
// 归并排序
public void merge_sort(int[] data) {
int[] temp = new int[data.length];
mergeSort(data, temp, 0, data.length - 1);
int n=data.length;
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
private void mergeSort(int[] data, int[] temp, int l, int r) {
int mid = (l + r) / 2;
if (l == r)
return;
mergeSort(data, temp, l, mid);
mergeSort(data, temp, mid + 1, r);
for (int i = l; i <= r; i++) {
temp[i] = data[i];
}
int i1 = l;
int i2 = mid + 1;
for (int cur = l; cur <= r; cur++) {
if (i1 == mid + 1)
data[cur] = temp[i2++];
else if (i2 > r)
data[cur] = temp[i1++];
else if (temp[i1] < temp[i2])
data[cur] = temp[i1++];
else
data[cur] = temp[i2++];
}
}
// 堆排序
public void heap_sort(int[] data) {
MaxHeap h = new MaxHeap();
h.init(data);
for (int i = 0; i < data.length; i++)
h.remove();
System.arraycopy(h.queue, 1, data, 0, data.length);
int n=data.length;
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
private class MaxHeap {
void init(int[] data) {
this.queue = new int[data.length + 1];
for (int i = 0; i < data.length; i++) {
queue[++size] = data[i];
fixUp(size);
}
}
private int size = 0;
private int[] queue;
public int get() {
return queue[1];
}
public void remove() {
swap(queue, 1, size--);
fixDown(1);
}
// fixdown
private void fixDown(int k) {
int j;
while ((j = k << 1) <= size) {
if (j < size && queue[j] < queue[j + 1])
j++;
if (queue[k] > queue[j]) // 不用交换
break;
swap(queue, j, k);
k = j;
}
}
private void fixUp(int k) {
while (k > 1) {
int j = k >> 1;
if (queue[j] > queue[k])
break;
swap(queue, j, k);
k = j;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -