已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、冒泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。

33 篇文章 3 订阅

不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

在这里插入图片描述

已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、冒泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。

代码已经写好,自己运行一下就好啦

代码:

/**
 *作者:魏宝航
 *2080年14月45日,上午8:41
 */
package 八大排序;
import java.util.Arrays;
import java.util.Scanner;
public class 八大排序 {
	public static void main(String[] args) {
		int[] a=new int[] {12,5,9,20,6,31,24};
		System.out.println("冒泡排序:");
		bubbleSort(new int[] {12,5,9,20,6,31,24});
		System.out.println("选择排序:");
		chooseSort(new int[] {12,5,9,20,6,31,24});
		System.out.println("插入排序:");
		insertSrot(new int[] {12,5,9,20,6,31,24});
		System.out.println("希尔排序:");
		hillSort(new int[] {12,5,9,20,6,31,24});
		System.out.println("基数排序:");
		baseSort(new int[] {12,5,9,20,6,31,24});
		System.out.println("归并排序:");
		mergeSort(a, 0, a.length-1, new int[7]);
		System.out.println("快速排序:");
		quickSort(new int[] {12,5,9,20,6,31,24});
		System.out.println("堆排序:");
		heapSort(new int[] {12,5,9,20,6,31,24});		
	}
	//冒泡排序
	public static void bubbleSort(int [] a) {
		int i,j;
		for(i=0;i<a.length-1;i++) {
			for(j=0;j<a.length-i-1;j++)
				if(a[j]>a[j+1]) {
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			System.out.println(Arrays.toString(a));
			
		}
	}
	//选择排序
	public static void chooseSort(int [] a) {
		int i,j;
		for(i=0;i<a.length;i++) {
			int min=a[i];
			int minindex=i;
			for(j=i+1;j<a.length;j++)
				if(a[j]<min) {
					min=a[j];
					minindex=j;
				}
			
			a[minindex]=a[i];
			a[i]=min;
			System.out.println(Arrays.toString(a));
		}
	}
	//插入排序
	public static void insertSrot(int [] a) {
		int i,j;
		for(i=1;i<a.length;i++) {
			j=i;
			int temp=a[j];
			if(a[j]<a[j-1]) {
				while(j-1>=0&&temp<a[j-1]) {
					a[j]=a[j-1];
					j--;
				}
				a[j]=temp;
			}
			System.out.println(Arrays.toString(a));
			
		}
	}
	//希尔排序
	public static void hillSort(int [] a) {
		int i,j;
		for(int gap=a.length/2;gap>0;gap/=2) {
			for(i=gap;i<a.length;i++) {
				j=i;
				int temp=a[j];
				if(a[j]<a[j-gap]) {
					while(j-gap>=0&&temp<a[j-gap]) {
						a[j]=a[j-gap];
						j-=gap;
					}
					a[j]=temp;
				}
			}
			System.out.println(Arrays.toString(a));
		}
	}
	//基数排序
	public static void baseSort(int [] a) {
		int i,j,k,n;
		int max=a[0];
		for(i=1;i<a.length;i++)
			if(a[i]>max)
				max=a[i];
		int maxlength=(max+"").length();
		int [][] bucket=new int [10][a.length];
		int [] bucketcount=new int [10];
		for(k=0,n=1;k<maxlength;k++,n*=10) {
			for(i=0;i<a.length;i++) {
				int dight=a[i]/n%10;
				bucket[dight][bucketcount[dight]]=a[i];
				bucketcount[dight]++;
			}
			int index=0;
			for(i=0;i<10;i++) {
				if(bucketcount[i]!=0) {
					for(j=0;j<bucketcount[i];j++) {
						a[index]=bucket[i][j];
						index++;
					}
				}
				bucketcount[i]=0;
			}
			System.out.println(Arrays.toString(a));
		}
	}
	//归并排序
	public static void merge(int [] a,int left,int mid,int right,int [] temp) {
		int i=left;
		int j=mid+1;
		int t=0;
		while(i<=mid&&j<=right) {
			if(a[i]<a[j]) {
				temp[t]=a[i];
				t++;
				i++;
			}
			else {
				temp[t]=a[j];
				t++;
				j++;
			}
		}
		while(i<=mid) {
			temp[t]=a[i];
			t++;
			i++;
		}
		while(j<=right) {
			temp[t]=a[j];
			t++;
			j++;
		}
		int templeft=left;
		t=0;
		while(templeft<=right) {
			a[templeft]=temp[t];
			templeft++;
			t++;
			
		}
	}
	public static void mergeSort(int [] a,int left,int right,int [] temp) {
		if(left<right) {
			int mid=(left+right)/2;
			mergeSort(a,left,mid,temp);
			mergeSort(a,mid+1,right,temp);
			merge(a,left,mid,right,temp);
			System.out.println(Arrays.toString(a));
		}
	}
	//快速排序
	public static void quickSort(int [] a) {
		if(a==null||a.length<=1)
			return;
		quickSort(a,0,a.length-1);
	}
	public static void quickSort(int [] a,int left,int right) {
		if(left>=right)
			return;
		int pivotindex=left+(int)(Math.random()*(right-left+1));
		swap(a,pivotindex,right);
		int i=left;
		int j=right-1;
		while(i<=j) {
			if(a[i]<=a[right])
				i++;
			else {
				swap(a,i,j);
				j--;
			}
		}
		swap(a,i,right);
		System.out.println(Arrays.toString(a));
		quickSort(a,left,i-1);
		quickSort(a,i+1,right);
		
	}
	public static void swap(int [] a,int x,int y) {
		int temp=a[x];
		a[x]=a[y];
		a[y]=temp;
	}
	//堆排序
	public static void heapSort(int[] a) {
		for(int i=a.length/2-1;i>=0;i--) {
			adjustHeap(a,i,a.length);
		}
		int temp;
		for(int j=a.length-1;j>0;j--) {
			temp=a[j];
			a[j]=a[0];
			a[0]=temp;
			adjustHeap(a,0,j);
			System.out.println(Arrays.toString(a));
		}
	}
	public static void adjustHeap(int[] a,int i,int length) {
		int temp=a[i];
		for(int k=i*2+1;k<length;k=k*2+1) {
			if(k+1<length&&a[k]<a[k+1]) {
				k++;
			}
			if(a[k]>temp) {
				a[i]=a[k];
				i=k;
				a[i]=temp;
			}else {
				break;
			}
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值