利用java实现各种排序

之前学数据结构与算法的时候学过一些排序的算法,但都是用的C++实现,在了解到java之后,其实感觉在一些算法实现过程中,Java好像比C++容易一些。现在很多代码还写不来,所以有部分就参考了一些大佬的代码○·○,侵权联系删☺
1.冒泡排序
依次做相连数据之间大小的比较,如果后数据比前面小则交换位置
实现:
1.外层循环:控制冒泡次数
2.内层循环:控制每次冒泡的过程​

public class sort {
	public static void main(String[] args) {
		int a[]= {5,3,6,8,1,0,2};
		System.out.print("排序前:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		
		for(int i=0;i<a.length;i++) {//冒泡排序实现
			for(int j=a.length-1;j>i;j--) {
				int temp=0;
				if(a[j]<a[j-1]){//交换位置
					temp=a[j-1]; a[j-1]=a[j]; a[j]=temp;
					}
			}
		}
		System.out.print("\n排序后:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}
}

2.合并排序
之前学算法时对合并排序的讲解:
zhiqian
java实现:

import java.util.Arrays;
public class merge_sort {
	public static void mergeSort(int a[]) {//拆分数组
		int length=a.length;
		if(length>1) {
			int middle=length/2;
			int a1[]=Arrays.copyOfRange(a, 0, middle);
			int a2[]=Arrays.copyOfRange(a, middle, length);
			
			mergeSort(a1);
			mergeSort(a2);
			merge(a1,a2,a);
		}	
	}
	public static void merge(int a1[],int a2[],int a[]) {//合并数组
		int i=0,j=0,k=0;
		while(i<a1.length && j<a2.length) {
			if(a1[i]<=a2[j]) {a[k]=a1[i];i++;}
			else             {a[k]=a2[j];j++;}
			k++;
		}
		if(i==a1.length) {
			while(k<a.length) {a[k]=a2[j];k++;j++;}
		}
		else if(j==a2.length) {
			while(k<a.length) {a[k]=a1[i];k++;i++;}
		}
	}
	public static void main(String[] args) {//简单验证
		int a[]={2,8,10,5,7,9,3,4,1,6};
		System.out.print("排序前:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		mergeSort(a);
		System.out.print("\n排序后:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}	
}

3.快速排序
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190712212402101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4umV0L3FxXzQ1MTAwNzA2,size_16,color_FFFFFF,t_70
java实现:

public class quickSort {
	public static void quick_sort(int a[],int left,int right) {
		int l=left,r=right;
		if(l>r) { return; }//左右扫描交叉,递归算法出口
		int key=a[left];//确定key
		while(l<r) {
			while(l<r && a[r]>key) {r--;}//从右往左找小于key的数	
			while(l<r && a[l]<=key) {l++;}//从左往右找第一个大于key的值
			if(l<r) {//交换找到的两个值
				int temp=a[l];a[l]=a[r];a[r]=temp;}
			}
		int temp=a[l];a[l]=a[left];a[left]=temp;//调整key的值
		quick_sort(a,left,l-1);//递归调用
		quick_sort(a,l+1,right);
		}
	public static void main(String[] args) {
		int a[]={2,8,10,5,7,9,3,4,1,6};
		System.out.print("排序前:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		quick_sort(a,0,a.length-1);
		System.out.print("\n排序后:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}
}

4.插入排序
在这里插入图片描述
java实现:

public class insertSort {
	public static void insert_sort(int a[]) {
		for(int i=1;i<a.length;i++) {
			for(int j=i;j>0;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[]={2,8,10,5,7,9,3,4,1,6};
		System.out.print("排序前:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		insert_sort(a);
		System.out.print("\n排序后:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}
}

5.选择排序

  • 从待排序序列中选出最小的元素排在第一个,然后在剩下的元素中又选出最小元素排在第二个,依次类推。直到全部排完为止。
public class selectSort {
	public static void select_sort(int a[]) {
		int min=0;
		for(int i=0;i<a.length;i++) {
			min=a[i];
			for(int j=i;j<a.length;j++) {
				if(a[j]<min) {int temp=min; min=a[j];a[j]=temp;}
			}
			a[i]=min;
		}
	}
	public static void main(String[] args) {
		int a[]={2,8,10,5,7,9,3,4,1,6};
		System.out.print("排序前:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		select_sort(a);
		System.out.print("\n排序后:");
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值