java 排序(二)

快速排序:
       先选择表中的一个元素作为划分元素.接下来,对表进行划分,小于划分元素的所有元素放到划分元素的左侧,大于划分元素的所有元素放大它的右侧.最后,再用这种策略对两个划分的字段进行排序.
public static void quickSort (Comparable[] data, int min, int max) {
		int pivot;
		
		if (min < max){
			pivot = partition(data, min, max);
			quickSort(data, min, pivot-1);
			quickSort(data, pivot+1, max);
		}
	}
	
	//为快速排序提供的分区方法
private static int partition (Comparable[] data, int min, int max){
		//把第一个元素作为划分元素
		Comparable partitionValue = data[min];
		
		int left = min;
		int right = max;
		
		while (left < right ) {
			//寻找一个大于划分元素的值
			while (data[left].compareTo(partitionValue) <= 0 && left < right)
				left ++;
			//寻找一个小于划分元素的值
			while (data[right].compareTo(partitionValue) > 0 )
				right --;
			
			if (left < right)
				swap(data, left, right);
		}
		swap(data, min, right);
		return right;
	}



归并排序:
      开始时将表分为大致相等的两端,然后对每个字表递归调用自身.继续这个递归调用过程,直到到达递归的基础情形时为止,这时表分为很多只含有一个元素的字表.然后,控制返
回递归调用结构,算法将从两个递归调用中得到的两个有序子段合并为一个有序表.

public static void mergeSort(Comparable[] data, int min, int max) {
		if(min < max) {
			int mid = (min + max) / 2;
			mergeSort(data, min, mid);
			mergeSort(data, mid + 1, max);
			merge(data, min, mid, max);
		}
	}
public static void merge(Comparable[] data, int first, int mid, int last) {
		
		Comparable[] temp = new Comparable[data.length];
		
		int first1 = first, last1 = mid;	//endpoints of first subarray
		int first2 = mid + 1, last2 = last;	//endpoints of second subarray
		int index = first1;
		
		while(first1 <= last1 && first2 <= last2) {
			if(data[first1].compareTo(data[first2]) < 0) {
				temp[index] = data[first1];
				first1 ++;
			}
			else {
				temp[index] = data[first2];
				first2 ++;
			}
			index ++;
		}
		//Copy remaining elements from first subarray, if any 
		while(first1 <= last1) {
			temp[index] = data[first1];
			first1 ++;
			index ++;
		}
		//Copy remaining elements from second subarray, if any 
		while(first2 <= last2) {
			temp[index] = data[first2];
			first2 ++;
			index ++;
		}
		
		//Copy merged data into original array
		
		for (index = first; index <= last; index++)
			data[index] = temp[index];
		
	}

你可能感兴趣的:(java,算法)