学习笔记之快速排序法 --java
来源:互联网 发布:中等收入陷阱国家 知乎 编辑:程序博客网 时间:2024/05/16 08:32
今天看视频,看到在讲快速排序法,就想自己动手写一下程序,可惜脑子不够灵活,写了半天,也只把第一次排序写明白,后来到百科上看到了实现了程序,一看就慌了,完全没有想到会用到递归调用。下面把代码贴过来,写上自己的理解,以便以后用。
package wtts20131227;
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]={1,6,0,-1,9,3,5,-5,2,8,11,-2};
/*Bubble bubble = new Bubble();
bubble.sort(arr);*/
QuickSort quickSort=new QuickSort();
quickSort.sort(arr,0,arr.length-1);
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
class Bubble
{
//冒泡排序
//外层循环
public void sort(int arr[])
{
int temp;
for(int i=0;i<arr.length-1;i++)
{
//内层循环开始依次比较,如果发现前一个比后一个大,则交换
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
class QuickSort
{
public void sort(int arr[],int start,int end)//毋庸置疑,第一个参数是要排序的数组,
//第二、三个参数是开始和 结束排序元素的数组的下标
{
int i,j,temp; //之所以定义两个变量分别存放start和end,是因为1、递归调用时要用到
//start和end中的值,所以在执行中不能修改它们的值 2、下面的程序要用
//到start和end的 值,且需要对这个值进行自加、自减运算
i=start;
j=end;
if((arr==null)||(arr.length==0)) return;//首先判断数组是否存在和数组的长度是否为0,
//数组不存在或长度为0,程序结束
while(i<j)
{
while(i<j&&arr[i]<=arr[j]) //以start为下标的元素扫描数组,直到遇到一个数
//大于arr[start]或i<j,循环结束
{
j--;
}
if(i<j) //判断上面循环是以哪种形式结束的,若是以遇到一个数
//大于arr[start]结束,交换两个数的位置
{
temp=arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
while(i<j&&i<j&&arr[i]<arr[j]){ //左侧扫描(此时a[j]中存储着key值)
i++;
}
if(i<j){ //找出第一个比key大的,交换位置
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
if(i-start>1){
//递归调用,把key前面的完成排序
//一开始一直纠结为什么这样调用就可以把key前面的完成排序,一直没想到调用这个
//函数时若满足条件,二次排序后,也可以调用 sort(arr,i+1,end),⊙﹏⊙b汗
sort(arr,start,i-1);
}
if(end-i>1){
sort(arr,i+1,end); //递归调用,把key后面的完成排序
}
}
}
0 0
- 学习笔记之快速排序法 --java
- 学习笔记之快速排序
- 菜鸟JAVA学习笔记之快速排序改进
- 算法(第四版)学习笔记之java实现快速排序
- 算法学习笔记--排序之快速排序
- Java学习笔记排序算法-----------快速排序
- 算法学习笔记之快速排序
- 算法导论之快速排序---学习笔记
- 算法学习笔记之快速排序
- 算法学习之快速排序(java)
- 算法学习之java实现快速排序
- 快速排序学习笔记
- 学习笔记--快速排序
- 快速排序学习笔记
- 快速排序--学习笔记
- 算法导论学习笔记(一)排序算法之快速排序
- 学习笔记之快速排序——quicklySort——基础算法——java
- JAVA排序算法学习之路第二站-快速排序
- x86系统执行的第一条指令
- JtextField getAction()
- Python在Eclipse中开发安装插件
- Android onKeyDown()监听返回键无效
- JSP内置对象----response
- 学习笔记之快速排序法 --java
- 使用 Eclipse 远程调试 Java 应用程序
- UVA - 10825 Anagram and Multiplication
- iOS编写一个画板,可以变化颜色,字体大小
- 自己的Vim配置
- JSP/Servlet基础——登录成功后返回之前的页面
- 安装DirectX SDK后,编译VTK出错"__RPC__out_xcount_part"
- Android之基于XMPP协议即时通讯软件(二)
- mysql: load data infile