排序算法(Java随笔)—冒泡排序&快速排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40780805/article/details/82891689

排序(Sort)是将一组数据按照一定的规则进行排列的,一般按递增或递减的顺序来进行排列。

最基本的排序法有:

冒泡排序(Bubble Sort):是所有排序算法中最简单的,最基本的一种,思路即交换,通过相邻数据的交换来达到排序的目的。

冒泡排序算法实例—代码实现:

//冒泡排序(bubble sort)
	int[] bubbleSort(int data[]){
		int temp;
		//外循环从1开始,比数组长度少1
		for(int i=1;i<data.length;i++){
			//内循环从0开始,执行次数随外循环的执行递减
			for(int j=0;j<data.length-i;j++){
				if(data[j]>data[j+1]){
					temp=data[j];
					data[j]=data[j+1];
					data[j+1]=temp;
				}
			}
		}
		return data;
	}

运行测试:

//冒泡排序算法测试
	public static void main(String[] args) {
		int[] data =new int[]{3,4,1,2,8,0,6,9,7,1};
		data=bubbleSort(data);
		System.out.println(Arrays.toString(data));
	}

//输出结果:
[0, 1, 1, 2, 3, 4, 6, 7, 8, 9]

快速排序(Quick Sort):和冒泡排序算法类似,都是基于交换的,对冒泡排序进行了改进,从而具有更高的执行效率。

快速排序的核心在于:选取了一个分界值,通过该分解值将数组分成了两部分,大于分界值的数据作为一部分放于分界值右边,小于分界值的数据作为一部分放于分界值的左边。然后再次分别从两部分数据中选出一个分界值,重复之前的操作。所以,会用到的技术有:分界值递归交换

快速排序算法实例—代码实现:

//快速排序——分界值+递归+交换
	int[] quickSort(int[] data,int start,int end){
		int tbase=data[start];//分界值——一般取第一个数据
		int tstart=start;
		int tend=end;
		
		while(tstart<tend){///判断分界值是否移动到了数组中间位置
			//因为分界值取的数组第一位,所以第一步是从数组右端开始往前查找比分界值小的数据以交换位置
			while(data[tend]>=tbase&&tstart<tend){
				tend--;
			}
			//查找到比分界值小的数据,开始交换
			if(data[tend]<tbase){
				int temp=data[tstart];
				data[tstart]=data[tend];
				data[tend]=temp;
			}
			//经过上面的交换后,分界值位置被交换到数组中后端,这时应从左开始往后查找比分界值大的数据以交换位置
			while(data[tstart]<=tbase&&tstart<tend){
				tstart++;
			}
			//查找到比分界值大的数据,开始交换
			if(data[tstart]>tbase){
				int temp1=data[tend];
				data[tend]=data[tstart];
				data[tstart]=temp1;
			}
		}
		//上面已经完成了数组的第一步排序,即分界值两端的数据安排、接下来递归继续分段排序
		if(tstart>start){//递归排序分界值左端的数据
			quickSort(data, start, tstart-1);//排序扫分界值左端第一个数据结束
		};
		if(tend<end){//递归排序分界值右端的数据
			quickSort(data, tend+1, end);//排序从分界值右端第一个数据开始
		};
		return data;
	}

运行测试:

//快速排序算法测试
	public static void main(String[] args) {
		int[] data =new int[]{3,4,1,2,8,0,6,9,7,1};
		data=quickSort(data,0,data.length-1);
		System.out.println(Arrays.toString(data));
	}

//输出结果:
[0, 1, 1, 2, 3, 4, 6, 7, 8, 9]

猜你喜欢

转载自blog.csdn.net/qq_40780805/article/details/82891689