数组排序

数组排序

package day02;

import java.util.Arrays;

public class m {
	
	public static void main(String[] args) {
		int[] arr = {9,8,3,0,5,6,0,4,7,2,1};

//		new m().arraySort1(arr);
//		System.out.println();
//		new m().arraySort2(arr);
//		System.out.println();
//		new m().arraySort3(arr);
//		System.out.println();
//		new m().arraySort4(arr);
//		System.out.println();
//		new m().arraySort5(arr);
		System.out.println();
		new m().arraySort6(arr);
	}
//	1.使用工具类Arrays
	public void arraySort1(int array[]) {
		Arrays.sort(array);
		for (int i : array) {
			System.out.print(i+",");
		}
	}
//	2.冒泡排序(交换元素)
	/**
	 * 找到剩下元素中最小的元素,将其依次放置到最末尾
	 * 步骤:
	 * 1.遍历整个数组
	 * 2.遍历数组中未排序的元素
	 * 3.判断被遍历的元素array[j],是否比array[j+1]大
	 * 4.如果比它大,就交换位置,如果不比他大,进行下一次循环
	 * 9,8,7,6,5,4,3,2,1
	 * 8,7,6,5,4,3,2,1
	 * 7,6,5,4,3,2,1
	 * 6,5,4,3,2,1
	 * 5,4,3,2,1
	 * 4,3,2,1
	 * 3,2,1
	 * 2,1
	 * 1
	 */
	public void arraySort2(int array[]) {
		int n = array.length-1;
		int k = 0;
		for (int i = 0; i < n; i++) {		//9
			for (int j = 0; j < n-i; j++) {	//9
				if (array[j]>array[j+1]) {	//j= 0 {8 9 7 6 5 4 3 2 1 }
					k=array[j];				//j= 8 {8 7 6 5 4 3 2 1 9 }
					array[j]=array[j+1];
					array[j+1]=k;
				}
			}
		}
		for (int i : array) {
			System.out.print(i+",");
		}
	}
//	3.选择排序
/**
 * 依次找到剩下元素中的最小的那位,将他依次放入0,1,2,3...中
 * 步骤:
 *1.遍历数组,
 *2.假设剩下元素中的第一号元素是最小的,拿剩下的元素跟他比较,找到比他更小的,替换他
 *3.找到剩下元素中的最小元素后,与
 * 987654321
 *  87654329
 *   7654389
 *    654789
 *     56789
 *     	6789
 *     	 789
 *        89
 *         9
 * (123456789)
 */
	public void arraySort3(int array[]) {
		int n = array.length;
		for (int i = 0; i < n; i++) {
			int tem = i;	//tem = 0
			for (int j = i; j < array.length; j++) { //遍历剩下元素最小的那位元素,tem记录该元素的下标
				if (array[j]<array[tem]) {
					tem = j;						
				}
			}
			//跟第i个元素交换
			int temp1 = array[i];					
			array[i] = array[tem];			//第一次最小的是tem=9		
			array[tem] = temp1;
		}
		for (int i : array) {
			System.out.print(i+",");
		}
	}
//	4.反转排序
	public void arraySort4(int array[]) {
		for (int i = 0; i < array.length/2; i++) {
			int tp = array[i];
			array[i]=array[array.length-i-1];
			array[array.length-i-1]=tp;
		}
		for (int i : array) {
			System.out.print(i+",");
		}
	}
//	5.直接插入排序
	public void arraySort5(int array[]) {
		for (int i = 1; i < array.length; i++) {
			for (int j = i; j > 0; j--) {
				if (array[j-1] >array[j]) {
					int tmp = array[j-1];
					array[j-1] = array[j];
					array[j] = tmp;
				}
			}
		}
		for (int i : array) {
			System.out.print(i+",");
		}
	}
//	6.希尔排序
	public void arraySort6(int array[]) {
		int n = array.length;
		int gap = n/2;
		while(gap>0) {
			for(int j = gap;j<n;j++) {
				int i = j;
				while(i>=gap&&array[i-gap]>array[i]) {
					int temp = array[i-gap]+array[i];
					array[i-gap]=temp-array[i-gap];
					array[i]=temp-array[i-gap];
					i-=gap;
				}
			}
			gap = gap/2;
		}
		for (int i : array) {
			System.out.print(i+",");
		}
	}
	
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值