快速排序
2016-03-25 20:09
405 查看
亲测可以运行。
简单说一下快排的思想:我给出的快排算法是基于递归的。每次递归都会使一个元素在最终的位置上。算法中,给定两个游标low和heigh,分别指向数组需要排序那段的开始和结尾。每次都是选择array[low]为基准元素进行比较,首先看array[heigh]是否大于基准元素,如果大于就减减,如果小于就跳出小循环,将array[heigh]赋值给array[low],大家不要担心array[low]的被覆盖,因为temp已经记录了array[low]的值了。然后进入第二个小循环,如果array[low]的值大于temp则将array[low]的值赋值给array[heigh],不要忘记赋值之后注意将low和heigh的值做相应的变化哦,比如low++,heigh--。
public class QuickSort {
{
int[] array=DataPrepare();
for(int a : array)
{
System.out.println(a);
}
Quick(array,0,9);
for(int a : array)
{
System.out.println(a);
}
}
public static void Quick(int[] array,int i,int j)
{
System.out.println("i is : "+i);
int temp;//以第一个元素为比较基准
int low=i;
int heigh=j;
if(low>=heigh)
{
return;
}
temp=array[i];
while(low<heigh)
{
while(low<heigh&&temp<=array[heigh])
{
heigh--;
}
if(low<heigh)
{
array[low++]=array[heigh];
}
while(low<heigh&&temp>array[low])
{
low++;
}
if(low<heigh)
{
array[heigh--]=array[low];
}
}
array[low]=temp;
Quick(array,i,low-1);
Quick(array,low+1,j);
}
public static int[] DataPrepare()
{
int[] array=new int[10];
array[0]=6;
array[1]=9;
array[2]=2;
array[3]=3;
array[4]=4;
array[5]=1;
array[6]=12;
array[7]=25;
array[8]=22;
array[9]=18;
return array;
}
}
运行结果如下:
简单说一下快排的思想:我给出的快排算法是基于递归的。每次递归都会使一个元素在最终的位置上。算法中,给定两个游标low和heigh,分别指向数组需要排序那段的开始和结尾。每次都是选择array[low]为基准元素进行比较,首先看array[heigh]是否大于基准元素,如果大于就减减,如果小于就跳出小循环,将array[heigh]赋值给array[low],大家不要担心array[low]的被覆盖,因为temp已经记录了array[low]的值了。然后进入第二个小循环,如果array[low]的值大于temp则将array[low]的值赋值给array[heigh],不要忘记赋值之后注意将low和heigh的值做相应的变化哦,比如low++,heigh--。
public class QuickSort {
{
int[] array=DataPrepare();
for(int a : array)
{
System.out.println(a);
}
Quick(array,0,9);
for(int a : array)
{
System.out.println(a);
}
}
public static void Quick(int[] array,int i,int j)
{
System.out.println("i is : "+i);
int temp;//以第一个元素为比较基准
int low=i;
int heigh=j;
if(low>=heigh)
{
return;
}
temp=array[i];
while(low<heigh)
{
while(low<heigh&&temp<=array[heigh])
{
heigh--;
}
if(low<heigh)
{
array[low++]=array[heigh];
}
while(low<heigh&&temp>array[low])
{
low++;
}
if(low<heigh)
{
array[heigh--]=array[low];
}
}
array[low]=temp;
Quick(array,i,low-1);
Quick(array,low+1,j);
}
public static int[] DataPrepare()
{
int[] array=new int[10];
array[0]=6;
array[1]=9;
array[2]=2;
array[3]=3;
array[4]=4;
array[5]=1;
array[6]=12;
array[7]=25;
array[8]=22;
array[9]=18;
return array;
}
}
运行结果如下:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树