快速排序法

今天复习快速排序法。快速排序法主要分为三步:分割、分割、合并。下面是代码:

package com.sort;

import java.util.Random;
/**
 * 
 * 快排策略一:对初始排序序列,先备份轴元素(一般为首元素),取两个游标left和right分别从左到右扫描,右到左扫描。left指向最左边的下标,right指向最右边
 * 		的下标。游标移动规则为:首先right向左搜索,找到第一个不大于轴元素的,把它移动到left的位置。再从left向右搜索,找到一个大于轴的元素,把它移动到right的位置。
 * 			重复上述过程,直到left=right,最后把轴元素放在right的位置
 * 	
 * @author  zhang
 * @date  2015年5月26日 下午6:47:51
 */
public class QuickSort {
	
	public static int LENGTH=12;
	
	public static void main(String[] args) {
		int[] arr=new int[LENGTH];
		
		initArr(arr);
		
		displayArr(arr);
		
		quickSort(arr);
		
		displayArr(arr);
	}
	
	public static void quickSort(int[] arr) {
		quickSort(arr,0,arr.length-1);
	}
	/**
	 * 
	 * @param arr 需要排列序列数组
	 * @param left 需要排序序列的最左元素下标
	 * @param right 需要排序序列的最右元素下标
	 */
	private static void quickSort(int[] arr, int left, int right) {
		if(left < right){
			int pivot = arr[left];
			
			int beg = left;
			int end = right;
			
			while (beg < end) {
				while(end > beg && arr[end] > pivot)
					end--;
				
				arr[beg] = arr[end];
				
				while(end > beg && arr[beg] <= pivot)
					beg++;
				
				arr[end] = arr[beg];
			} 
			
			arr[end] = pivot;
			
			quickSort(arr, left, end-1);
			quickSort(arr, end+1, right);
		}
	}
	/**
	 * 遍历数组
	 * @param arr
	 */
	public static void displayArr(int[] arr) {
		for (int i : arr) {
			System.out.print(i+"   ");
		}
		
		System.out.println();
	}
	/**
	 * 通过随机数为一个int类型数组进行初始化赋值
	 * @param arr
	 */
	public static void initArr(int[] arr) {
		
		Random rd=new Random();
		
		for (int i = 0; i < arr.length; i++) {
			arr[i]=rd.nextInt(arr.length);
		}
	}
}

package com.sort;

import java.util.Random;
/**
 * 快速策略二:
 * 		分别从待排序序列的两边相向遍历,即从左向右确定第一大于轴元素的元素,
 * 从右向左确定第一个不大于轴元素的元素,然后交换二者
 * @author  zhang
 * @date  2015年5月26日 下午6:46:06
 */
public class QuickSort2 {
	
	public static int LENGTH=12;
	
	public static void main(String[] args) {
		int[] arr=new int[LENGTH];
		
		initArr(arr);
		
		displayArr(arr);
		
		quickSort(arr);
		
		displayArr(arr);
	}
	/**
	 * 
	 * @param arr
	 */
	public static void quickSort(int[] arr) {
		quickSort(arr,0,arr.length-1);
	}
	/**
	 * 
	 * @param arr 需要排列序列数组
	 * @param left 需要排序序列的最左元素下标
	 * @param right 需要排序序列的最右元素下标
	 */
	private static void quickSort(int[] arr, int left, int right) {
		if(left < right){
			int pivot = arr[left];
			
			int beg = left;
			int end = right;
			
			while (beg <= end) {
				while(end >= beg && arr[end] > pivot)
					end--;
				
				while(end >= beg && arr[beg] <= pivot)
					beg++;
				
				if(beg < end){
					//交换两个元素的值
					int temp = arr[beg];
					arr[beg] = arr[end];
					arr[end] = temp;
					
					beg++;
					end--;
				}
			} 
			
			arr[left] = arr[end];
			arr[end] = pivot;
			
			quickSort(arr, left, end-1);
			quickSort(arr, end+1, right);
		}
	}
	/**
	 * 遍历数组
	 * @param arr
	 */
	public static void displayArr(int[] arr) {
		for (int i : arr) {
			System.out.print(i+"   ");
		}
		
		System.out.println();
	}
	/**
	 * 通过随机数为一个int类型数组进行初始化赋值
	 * @param arr
	 */
	public static void initArr(int[] arr) {
		
		Random rd=new Random();
		
		for (int i = 0; i < arr.length; i++) {
			arr[i]=rd.nextInt(arr.length);
		}
	}
}


本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的大学生第二课堂系统,旨在为大学生提供一个便捷、高效的学习和实践平台。项目包含了完整的数据库设计、后端Java代码实现以及前端Vue.js页面展示,适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 在功能方面,系统主要实现了以下几个模块:用户管理、课程管理、活动管理、成绩管理和通知公告。用户管理模块支持学生和教师的注册、登录及权限管理;课程管理模块允许教师上传课程资料、设置课程时间,并由学生进行选课;活动管理模块提供了活动发布、报名和签到功能,鼓励学生参与课外实践活动;成绩管理模块则用于记录和查询学生的课程成绩和活动参与情况;通知公告模块则实时发布学校或班级的最新通知和公告。 技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,确保了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提升了用户体验和开发效率。 该项目不仅提供了完整的源代码和相关文档,还包括了详细的数据库设计文档和项目部署指南,为学习和实践提供了便利。对于基础较好的学习者,可以根据自己的需求在此基础上进行功能扩展和优化,进一步提升自己的技术水平和项目实战能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值