java国家排序_Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)

本文实例汇总了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值