排序算法——Java

1.冒泡排序

package sort;

import java.util.ArrayList;

public class Bubble {
	
	public final static int SIZE = 20;
	
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		
		//a初始化list(从小到大,排序后从大到小)
		for(int i = 0;i<SIZE;i++) {
			list.add(i);
		}
		System.out.println("Before sort:");
		list.forEach(obj->System.out.print(obj + " "));
		System.out.println();
		
		//b实现排序		
		int temp;		
		for(int i = 0;i<list.size()-1;i++) {
			for(int j=1;j<list.size()-i;j++) {
				if(list.get(j)>list.get(j-1)) {	
					temp = list.get(j);
					list.set(j, list.get(j-1));
					list.set(j-1, temp);
				}
			}
		}
		System.out.println("Bubble sort:");
		list.forEach(obj->System.out.print(obj + " "));
		System.out.println();

		
	}
}

2.选择排序

package sort;

import java.util.ArrayList;

public class Choose {

	public final static int SIZE = 20;

	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();

		// a初始化list(从小到大,排序后从大到小)
		for (int i = 0; i < SIZE; i++) {
			list.add(i);
		}
		System.out.println("Before sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();
		
		int len = list.size();
		int max;
		int max_index;
		int temp;
		//
		for(int i=0;i<len-1;i++) {
			max = list.get(i);
			max_index = i;
			for(int j=i+1;j<len;j++) {
				if(max<list.get(j)) {
					max= list.get(j);
					max_index = j;
				}else {}
			}
			temp = list.get(i);
			list.set(i, max);
			list.set(max_index, temp);
		}
		
		System.out.println("Choose sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();
	}
}

3.插入排序

package sort;

import java.util.ArrayList;

public class Insertion {
	
	public final static int SIZE = 20; 
	
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();

		// a初始化list(从小到大,排序后从大到小)
		for (int i = 0; i < SIZE; i++) {
			list.add(i);
		}
		//a初始化list(从大到小)
//		for (int i = SIZE-1; i >= 0; i--) {
//			list.add(i);
//		}
		System.out.println("Before sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();
		
		int len = list.size();
		int cur_index;
		int temp;
		
		/*
		 * 从小到大排序
		 */
//		for(int i=1;i<len;i++) {
//			cur_index = i-1;	//a当前比较位置
//			temp = list.get(i);	//a要插入到前面已经排序好的数组的元素
//			while(cur_index>=0 && temp<list.get(cur_index)) {				
//				list.set(cur_index+1,list.get(cur_index));				
//				cur_index--;
//			}
//			list.set(cur_index+1, temp);
//		}
		
		/*
		 * 从大到小排序
		 */
		for(int i=1;i<len;i++) {
			cur_index = i-1;	//a当前比较位置
			temp = list.get(i);	//a要插入到前面已经排序好的数组的元素
			while(cur_index>=0 && temp>list.get(cur_index)) {				
				list.set(cur_index+1,list.get(cur_index));				
				cur_index--;
			}
			list.set(cur_index+1, temp);
		}
		
		
		System.out.println("Insertion sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();
		
	}
}

4.希尔排序

package sort;

import java.util.ArrayList;

public class Shell {
	public final static int SIZE = 20;

	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();

		// a初始化list(从小到大,排序后从大到小)
		for (int i = 0; i < SIZE; i++) {
			list.add(i);
		}
		System.out.println("Before sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();

		
		int list_len = list.size();
		int step_len = list_len/2;
		int current_index;
		int temp;
		// b实现排序
//		while(step_len>0) {
//			for(int i=step_len;i<list_len;i++) {
//				current_index = i-step_len;
//				temp = list.get(i);
//				for(int j=current_index;j>=0;j-=step_len) {
//					if(temp>list.get(j)) {
//						list.set(j+step_len, list.get(j));
//					}else if(temp <= list.get(j)) {//这里可能进不来,比如current_index=10的时候,将list[10]设置为0后,灭有设置这里,for循环就结束了
//						list.set(j+step_len, temp);
//						break;
//					}
//				}
//			}
//			step_len/=2;
//		}
		
		while(step_len>0) {
			for(int i=step_len;i<list_len;i++) {
				current_index = i-step_len;
				temp = list.get(i);
				while(current_index>=0 && temp>list.get(current_index)) {
					list.set(current_index+step_len, list.get(current_index));
					current_index-=step_len;
				}
				list.set(current_index+step_len, temp);
			}
			step_len/=2;
		}
		
		
		// c输出排序结果
		System.out.println("Shell sort:");
		list.forEach(obj -> System.out.print(obj + " "));
		System.out.println();

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值