您的位置:首页 > 编程语言 > Java开发

排序算法总结(Java)

2015-09-11 16:02 615 查看

1 插入排序

1.1、直接插入排序

package org.com.sort;

public class InsertSort {
public static void insert_sort(int a[], int n) {
for(int i = 1; i < n; i++) {
if(a[i] < a[i-1]) {
int j = i - 1;
int temp = a[i];
while(j >= 0 && a[j] > temp) {
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
}
public static void main(String[] args) {
int a[] = {4,3,2,1};
insert_sort(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}

}

1.2 希尔排序

标准希尔排序:
package org.com.sort;

public class ShellInsertSort {
public static void shell_insert_sort1(int a[], int n) {
for(int dk = n/2; dk > 0; dk /= 2) {
for(int i = 0; i < dk; i++) {
for(int j = i + dk; j < n; j += dk) {
if(a[j] < a[j-dk]) {
int temp = a[j];
int k = j - dk;
while(k >= 0 && a[k] > temp) {
a[k+dk] = a[k];
k -= dk;
}
a[k + dk] = temp;
}
}
}
}
}

public static void main(String[] args) {
int a[] = {3,4,6,3,1,7,9,4};
shell_insert_sort1(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}
}


上述希尔排序虽然容易理解,但代码不够简洁,下述为从dk-n直接的按照dk长度进行排序:

package org.com.sort;

public class ShellInsertSort {
public static void shell_insert_sort2(int a[], int n) {
for(int dk = n/2; dk > 0; dk /= 2) {
for(int i = dk; i < n; i++) {
if(a[i] < a[i - dk]) {
int temp = a[i];
int j = i - dk;
while(j >= 0 && a[j] > temp) {
a[j + dk] = a[j];
j -= dk;
}
a[j + dk] = temp;
}
}
}
}

public static void main(String[] args) {
int a[] = {3,4,6,3,1,7,9,4};
shell_insert_sort2(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}
}


2 选择排序

2.1 直接选择排序

package org.com.sort;

public class SimpleSelectSort {
public static void simple_select_sort(int a[], int n) {
for(int i = 0; i < n; i++) {
int index = i;
for(int j = i + 1; j < n; j++) {
if(a[index] > a[j]) {
index = j;
}
}
if(i != index) {
int temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
}

public static void main(String args[]) {
int a[] = {3,12,6,3,0,7,9,4, 1, 10, 78};
simple_select_sort(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}

}


2.1 堆排序

package com.sort2.select;

public class HeapSort {

public static void heapAdjust(int a[], int i , int size) {
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int max = i;
if(lchild < size) {
if(rchild < size && a[max] < a[rchild])
max = rchild;
if(a[max] < a[lchild])
max = lchild;
if(i != max) {
int temp = a[i];
a[i] = a[max];
a[max] = temp;
heapAdjust(a, max, size);
}

}  else {
return ;
}
}

public static void buildHeap(int a[], int size) {
for(int i = size / 2; i >= 0; i--) {
heapAdjust(a, i, size);
}
}

public static void heap_sort(int a[], int size) {
buildHeap(a, size);
for(int i = size - 1; i >= 0; i--) {
int temp = a[0];
a[0] = a[i];
a[i] = temp;
heapAdjust(a, 0, i);
}
}

public static void main(String args[]) {
int a[] = {4,5,2,8,9,1,8,3,0};
heap_sort(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}

}


3 交换排序

3.1 冒泡排序

package com.sort2.change;

public class BubbleSort {
public static void bubble_sort(int a[], int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n - i - 1; j++) {
if(a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
public static void main(String args[]) {
int a[] = {4,5,2,8,9,1,8,3,0};
bubble_sort(a, a.length);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}
}


3.2 快速排序

package com.sort2.change;

public class QuitSort {
public static void  quik_sort(int a[], int left, int right) {
if(left >= right) return ;
int i = left;
int j = right;
int temp = a[i];
while(i < j) {
while(i < j && a[j] >= temp) j--;
if(i < j)
a[i++] = a[j];
while(i < j && a[i] <= temp) i++;
if(i < j)
a[j--] = a[i];
}
a[i] = temp;
quik_sort(a, left, i - 1);
quik_sort(a, i+ 1, right);
}
public static void main(String args[]) {
int a[] = {4,5,2,8,9,1,8,3,0};
quik_sort(a, 0, a.length - 1);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: