本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下:
1. 冒泡排序:
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,444,345};
show(a);
bubbleSort(a);
show(a);
}
private static void bubbleSort(int[] a) {
for(int i=0;i
for(int j=0;j
if(a[j]>a[j+1]){
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
private static void show(int[] a) {
System.out.println(Arrays.toString(a));
}
}
2. 快速排序(无重复值):
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,32,5,4,3,12,23,110};
show(a);
quickSort(a,0,a.length-1);
show(a);
}
private static void quickSort(int[] a, int start, int end) {
if (start>=end)
return;
int i=start;
int j=end;
int index = start;
while(i
while(a[j]>a[index]){
j--;
}
index = swap(a,j,index);
while(a[index]>a[i]){
i++;
}
index = swap(a,i,index);
}
quickSort(a, start, index-1);
quickSort(a, index+1, end);
}
private static int swap(int[] a, int n, int index) {
int tmp = a[n];
a[n] = a[index];
a[index] = tmp;
return n;
}
private static void show(int[] a) {
System.out.println(Arrays.toString(a));
}
}
3. 快速排序(可含重复值)
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,345};
show(a);
quickSort2(a,0,a.length-1);
show(a);
}
private static void quickSort2(int[] a, int start, int end) {
if (start>=end)
return;
int i=start;
int j=end;
int index = end;
while(i
while(a[j]>a[index]){
j--;
}
if (j!=index && a[j]==a[index]){
index = swap(a,--j,index);
}else{
index = swap(a,j,index);
}
while(a[index]>a[i]){
i++;
}
if (i!=index && a[i]==a[index]){
index = swap(a,++i,index);
}else{
index = swap(a,i,index);
}
}
quickSort2(a, start, index-1);
quickSort2(a, index+1, end);
}
private static int swap(int[] a, int n, int index) {
int tmp = a[n];
a[n] = a[index];
a[index] = tmp;
return n;
}
private static void show(int[] a) {
System.out.println(Arrays.toString(a));
}
}
4. 堆排序
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,444,345};
show(a);
heapSort(a);
show(a);
}
private static void heapSort(int[] a) {
//建立最大堆
int size = a.length;
for(int i=size/2-1;i>=0;i--){
createBigHeap(a,i,size-1);
}
//排序
for(int j=0;j
int tmp=a[0];
a[0]=a[size-1-j];
a[size-1-j]=tmp;
createBigHeap(a,0,size-2-j);
}
}
private static void createBigHeap(int[] a, int start, int end) {
int tmp = a[start];
int j = 2*start+1;
while(j<=end){
if (j
j++;
}
if (a[j]>tmp){
a[start] = a[j];
start = j;
j = 2*j+1;
}else{
break;
}
}
a[start] = tmp;
}
private static void show(int[] a) {
System.out.println(Arrays.toString(a));
}
}
5. 插入排序
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,32,5,4,-1,3};
show(a);
insertSort(a);
show(a);
}
private static void insertSort(int[] a) {
for(int i=0;i
int n = i+1;
int tmp = a[n];
for(int j=i;j>=0;j--){
if(tmp
a[n] = a[j];
n=j;
}
}
if (a[n]!=tmp)
a[n] = tmp;
}
}
private static void show(int[] a) {
System.out.println(Arrays.toString(a));
}
}
6. 折半插入排序
public class SortTest {
public static void main(String[] args) {
int[] a = {345,7,7,345,2,2,7,2,7,23,2,345,7,32,5,4,-1,3,7,2,3,2,3,4,2,1,2,4,5,3,345,3,2};
show(a);
insertSort2(a);
show(a);
}
private static void insertSort2(int[] a) {
for(int i=0;i
int n = i+1;
int tmp = a[n];
if (tmp>a[i])
continue;
int low = 0;
int high = i;
int mid = (high+low)/2;
while(high>=low){
mid = (high+low)/2;
if(tmp