排序算法JAVA实现(上)

1. 冒泡排序算法实现(java)

首先给出一个数组{3,4,5,1,2},
第一趟:
第一次比较:3小于4,不用交换位置
第二次比较:4小于5,不用交换位置
第三次比较:5大于1,a[i]与a[i+1]交换位置
第四次比较:5大于2,a[i]与a[i+1]交换位置
第一趟比较了四次,结果为{3,4,1,2,5}
第二趟:
第一次比较:3小于4,不用交换位置
第二次比较:4大于1,a[i]与a[i+1]交换位置
第三次比较:4大于2,a[i]与a[i+1]交换位置
第二趟比较了三次,结果为{3,1,2,4,5}
第三趟:
第一次比较:3大于1,a[i]与a[i+1]交换位置
第二次比较:3大于2,a[i]与a[i+1]交换位置
第三趟比较了二次,结果为{1,2,3,4,5}
第四趟:
第一次比较:1小于2,不用交换位置
第四趟比较了一次,结果为{1,2,3,4,5}
数组长度为5,总共比较了四趟,所以可以用arr.length控制循环的趟数,每一趟需要比较的次数均为未排好的数的个数减一(带有标记的是已经排好的数),所以可以用arr.length-j来控制每一趟比较的次数

public static void main(String[] args) {
			// TODO Auto-generated method stub
			int[] arr = {3,4,5,1,2};
	        paw(arr);//输出排列好后的数组
	        for(int i=0;i<arr.length;i++) {
				System.out.print(arr[i]+" ");
			}
		}

private static void paw(int arr[]) {
			int temp;
			for(int j=1;j<arr.length;j++) {//趟数
			for(int i=0;i<arr.length-j;i++) {//控制每一趟的比较次数
				if(arr[i]>arr[i+1]) {
					temp=arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=temp;
				}
			}
			
		}
			
	}

2、选择排序算法实现(java)

从arr[0]开始遍历,当找到比arr[0]小的数,便把新的数值作为目标值,继续向后遍历比较,当前数组遍历完后,找到的最小值与arr[0]交换

public static void main(String[] args) {
			// TODO Auto-generated method stub
			int[] arr = {3,4,5,1,2};
	        paw0(arr);//输出排列好后的数组
	        for(int i=0;i<arr.length;i++) {
				System.out.print(arr[i]+" ");
				
			}
		}
private static void paw0(int arr[]) {
			int temp;
			for(int i=0;i<arr.length-1;i++) {
				int min = i;
				for(int j=i+1;j<arr.length;j++) {
					if(arr[min]>arr[j]) {
						 min=j;
					}
					}
				if(i!=min) {
					temp=arr[i];
					arr[i]=arr[min];
					arr[min]=temp;
				}
			}			
		}

3、 插入排序实现(java)

默认a[0]已经排好序用a[1]与a[0]比较,若比a[0]小,就插在a[0]的前面,若比a[0]大,就插在a[0]的后面。依次向后遍历,与前面已经排好序的数组作比较。

private static void paw1(int arr[]) {
			for(int i=1;i<arr.length;i++) {//控制要比较的目标数值,默认a[0]已经排好序
				int temp;
				for(int j = 0;j<i-1;j++) {//目标数值与已经排好的序列进行比较
					if(arr[j]>arr[i]) {
						temp=arr[i];
						arr[i]=arr[j];
						arr[j]=temp;	
					}
				}
			}
			
		}

4、希尔排序实现(java)

public static void main(String[] args) {
			// TODO Auto-generated method stub
			int brr[]= {9,8,7,7,5,4,3,2,1};
			shellsort(brr);
			for (int i = 0; i <brr.length; i++) {
					System.out.println(brr[i]);
			}

		}
		public static void shellsort(int[] arr) {
			for (int internval = arr.length/2 ; internval > 0; internval = internval/2) {
				//不断的缩小增量
				//增量为1的插入排序
				for (int i = internval; i < arr.length; i++) {
					int target =arr[i];
					int j=i-internval;
					while(j>-1&&target<arr[j]) {
						arr[j+internval]=arr[j];
						j-=internval;
					}
					arr[j+internval]=target;
				}
			}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值