排序代码,以备用时之需

public class Demo {
	public static void main(String[] args) {
		int length = 8;
		int arr[] = new int[length];
		for(int i=0;i<length;i++) {
			arr[i] = (int)(Math.random()*8000);
		}
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"  ");
		}
		long startTime = System.currentTimeMillis();
		System.out.println("排序!");
		//quickSort(arr, 0, arr.length-1);
		int temp[] = new int[length];
		mergeSort(arr, 0, length, temp);
		System.out.println("排序!"+(System.currentTimeMillis() - startTime));
		System.out.println();
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"  ");
		}
	}
	/**
	 * @param arr
	 * 	冒泡排序思想:
	 * 	从第一个开始比较,每次将需要选择最大(最小的)放到最后
	 * 	下次在从前面的数据里面找出,再次进行,直到结束
	 */
	public static void bubbleSort1(int arr[]) {
		int temp ;
		boolean flag = true;
		//比较的次数是arr.length-2次
		for(int i=0;i<arr.length-1;i++) {
			flag = true;
			for(int j = 0;j<arr.length-1-i;j++) {
				if(arr[j+1]>arr[j]) {
					flag = false;
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
				if(flag) {
					break;
				}
			}
		}
	}
	
	/**
	 * @param arr
	 * 	选择排序,每次选择最小(最大)放在第一个位置上,一次类推
	 */
	public static void bubbleSort2(int arr[]) {
		int min = 0;
		int temp  =0;
		for(int i=0;i<arr.length-1;i++) {
			min = i;
			for(int j = i;j<arr.length;j++) {
				if(arr[min]>arr[j]) {
					min = j;
				}
			}
			if(min != i) {
				temp = arr[i];
				arr[i]=arr[min];
				arr[min]=temp;	
			}
		}
	}
	
	/**
	 * @param arr
	 * 	插入排序
	 * 	从前面开始一个一个插入,有序和无序部分,将无序的一个一个的插入到有序里面
	 */
	public static void bubbleSort4(int arr[]) {
		int temp ; 
		int index;
		for(int j = 1;j<arr.length;j++) {
			temp = arr[j];
			index = j;
			for(int z = j-1;z >= 0;z=z-1) {
				if(temp<arr[z]) {
					arr[z+1]=arr[z];
					index = z;
				}
			}
			arr[index] = temp;
		}
	}
	
	/**
	 * @param arr
	 * 	shell排序,先明白插入排序,在进行将插入排序的大小变为数组1/2的大小,进行
	 */
	public static void bubbleSort3(int arr[]) {
		int temp ; 
		int index;
		for(int i= arr.length/2;i>0;i=i/2) {
			for(int j = i;j<arr.length;j++) {
				temp = arr[j];
				index = j;
				for(int z = j-i;z >= 0;z=z-i) {
					if(temp<arr[z]) {
						arr[z+i]=arr[z];
						index = z;
					}
				}
				arr[index] = temp;
			}
		}
	}
	public static void quickSort(int arr[],int left,int right) {
		int l = left;
		int r = right;
		int mid = (left+right)/2;
		int temp=0;
		int povi = arr[mid];
		while(l<r) {
			while(arr[l]<povi) {
				l+=1;
			}
			while(arr[r]>povi) {
				r--;
			}
			if(l>=r) {
				break;
			}
			temp = arr[l];
			arr[l]=arr[r];
			arr[r]=temp;
			if(arr[l]==povi) {
				r++;
			}
			if(arr[r]==povi) {
				l--;
			}
		}
		if(l==r) {
			l++;
			r--;
		}
		if(left<r) {
			quickSort(arr, left, r);
		}
		if(right>l) {
			quickSort(arr, l, right);
		}
	}
	
	
	public static void mergeSort(int arr[],int left,int right,int []temp) {
		if(left<right) {
			int mid = (left+right)/2;
			mergeSort(arr, left, mid, temp);
			mergeSort(arr, mid, right, temp);
			merge(arr, left, mid, right, temp);
		}
	}
	public static void merge(int arr[],int left,int mid,int right,int temp[]) {
		int i = left;
		int j = mid + 1;
		int t = 0;
		while(i<=mid&&j<=right) {
			if(arr[i]>arr[j]) {
				temp[t]=arr[j];
				t++;
				j++;
			}else {
				temp[t]=arr[i];
				t++;
				i++;
			}
		}
		while(i<=mid) {
			temp[t] = arr[i];
			t++;
			i++;
		}
		
		while(j<=right) {
			temp[t] = arr[j];
			t++;
			j++;
		}
		//将其复制
		t = 0;
		int tempLeft = left;
		while(tempLeft <= right) {
			arr[tempLeft] = temp[t];
			t++;
			tempLeft++;
		}
	}
	
}
posted @ 2019-10-13 22:11  kwdeep  阅读(137)  评论(0编辑  收藏  举报