六种排序(选择排序,插入排序,希尔排序,快速排序,冒泡排序,归并排序)

package al;

import java.util.Arrays;
import java.util.Random;

public class Test {
	public static void main(String[] args) {
		Random r = new Random();
		int[] a = new int[1024];
		for(int i = 0;i < a.length ;i++) {
			a[i] = r.nextInt(100);
		}
		System.out.println(Arrays.toString(a));
		quickSort(a,0,a.length-1);
		System.out.println(Arrays.toString(a));
	
	}
	
	//冒泡排序
	public static void bubbleSort(int a[] ) {
		for(int i = 0;i < a.length - 1;i++) {
			for(int j = 0;j < a.length -1 - i;j++) {
				if(a[j] < a[j + 1]) {
					swap(a,j,j+1);
				}
			}
		}

	}
	//选择排序
	public static void selectSort(int a[] ) {
			
		for(int i = 0;i <a.length - 1;i++) {
			int min = i;
			for(int j = i + 1;j < a.length;j++) {
				if(a[j] < a[min]) {
						min = j;
				}
			}
				swap(a,i,min);
		}
	}
	//插入排序
	public static void insertSort(int a[]) {
		for(int i = 1;i < a.length;i++) {
			int index = i;
			int temp = a[i];
			while(index > 0 && temp < a[index - 1]) {
				a[index] = a[index - 1];
				index--;
			}
			a[index] = temp;	
		}
	}

	//希尔排序(不是很稳定的排序,当数相同也会发生调换)
	public static void shellSort(int a[]) {
		int d = 5;
		while(d >= 1) {
			for(int i = 0;i < a.length;i++) {
				for(int j = i;j < a.length - d;j = j + d) {
					if(a[j] > a[j + d]) {
						int temp = a[j + d];
						int index = j + d;
						while(index - d >= 0 && a[index - d] > temp) {
							a[index] = a[index -d];
							index = index -d;
						}
						a[index] = temp;
					}
				}
			}
			
			 d = d / 2;
		}
	}
	
	//归并排序
	public static void merge(int a[],int start,int end) {
		if(start < end) {
			int mid = (start + end) / 2;
			merge(a,start,mid);
			merge(a,mid + 1,end);
			mergeSort(a,start,mid,end);
		}
	}
	//辅助数组
	public static void mergeSort(int a[],int start,int mid,int end) {
		int p1 = start,p2 = mid + 1;
		int index = 0;
		int temp[] = new int[end - start + 1];
		while(p1 <= mid && p2 <= end){
			if(a[p1] > a[p2]) {
				temp[index++] = a[p2++];
			}else {
				temp[index++] = a[p1++];
			
			}
		}
		
		while(p1 <= mid) {
			temp[index++] = a[p1++];
		}
		
		while(p2 <= end) {
			temp[index++] = a[p2++];
		}
		
		for(int i = 0;i < temp.length;i++) {
			a[i + start] = temp[i];
		} 
	}
	
	//快速排序
	public static void quickSort(int a[],int start,int end) {
		if(start > end) {
			return;
		}
		int pivot1 = start;
		int pivot2 = end;
		int tar = a[start];
		while(pivot1 != pivot2) {
			
			while(pivot2 > pivot1 && a[pivot2] >= tar) {
				pivot2--;
			}
			
			while(pivot2 > pivot1 && a[pivot1] <= tar) {
				pivot1++;
			}
			
			if(pivot2 > pivot1) {
				swap(a,pivot1,pivot2);
			}
			
		}
		a[start] = a[pivot1];
		a[pivot1] = tar;
		
		quickSort(a,start,pivot1 - 1);
		quickSort(a,pivot1 + 1,end);
	}

	
	public static void swap(int a[],int i,int j) {
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值