冒泡排序和快速排序

冒泡排序
  重复走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把他们交换过来。走访数列的工作是重复的进行直到没有再进行交换的数列。

public void bubbleSort(int[] array){
	int[] a = array;
	for(int i = 0;i < a.length;i ++){
		for(int j = i+1;j < a.length;j ++){
			//从小到大排序
			if(a[i] > a[j]){
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	for(int num : array){
		System.out.print(num+",");
	}
}

快速排序
  选择一个关键字作为基准值,比基准值小的都在左边序列,比基准值大的都在右边序列,一般选择第一个元素作为基准值。
  先从后往前依次比较,若发现比基准值小的则将该元素与基准值交换位置,然后再从前往后依次与基准值比较,若发现比基准值大的则将该元素与基准值交换位置,直到从后往前的比较索引大于从前往后的比较索引,结束第一次循环,此时对于基准值来说左边都比它小右边都比它大,但左右两边的序列不一定是有序的,因此需要递归。

	public void fastSort(int a[],int low,int high){
		int key = a[start];
		int start = low;
		int end = hegh;
		while(end>start){
			//从后往前比较
			while(end>start&&a[end]>=key){         //若最后一个数大于基准值
				end--;
			}
			if(a[end]<key]{
				int temp = a[end];
				a[end] = a[start];
				a[start] = temp;
			}
			//从前往后比较
			while(end>start&&a[start]<=key){
				start++;
			}
			if(a[start]>key){
				int temp = a[end];
				a[end] = a[start];
				a[start] = temp;
			}
			//此时第一次循环结束
		}
		//递归
		if(start>low)                                       //说明start不是第一个
			fastSort(a,low,start-1);
		if(end < high){                                    //说明end不是最后一个
			fastSort(a,end+1,high);
		}
	}

猜你喜欢

转载自blog.csdn.net/weixin_43766090/article/details/84994664
今日推荐