最近这段时间各种实习生面试笔试也经历不少,感觉大一大二的荒废还是让自己比较吃力!
今天终于是下定决心准备好好实干一番了,我准备从今天开始,一天实现两种到三种数据结构和算法,好好梳理下自己的知识,为了后面9月份不在找工作的大潮中淹没,我要开始努力了!
快速排序:
原理:(这里是我的理解了)先在给定的序列中,确定一个轴值,然后将序列中比轴值大的放一边,比轴值小的放一边,最后对这两边的序列分别使用快排.
代码:
package com.data.silence;
/**
* 数据的快速排序
* @author silence
*
*/
public class QuickSort {
/**
* 快排的算法
* @param target
*/
public int qSort(int[] target , int begin , int end){
int keyTemp = target[begin];
while(begin < end){
while(begin<end && target[end]>keyTemp){
end--;
}
target[begin] = target[end];
while(begin<end&&target[begin] <keyTemp){
begin++;
}
target[end] = target[begin];
// System.out.println("begin = "+begin+"||"+"end = "+end+"||key ="+keyTemp);
}
target[begin] = keyTemp;
return begin ;
}
public void quick(int[] target , int begin , int end){
if(begin >= end){
return ;
}
int keyIndex = qSort(target , begin ,end); //分治,将轴值放到合适的位置
quick(target , begin ,keyIndex -1 ); //递归调用
quick(target , keyIndex+1 , end );
}
public static void main(String[] args){
int[] source = new int[]{34,53,67,1,2,9,36,66,54,33,22};
for(int i = 0;i<source.length;i++){
System.out.print(source[i]+",");
}
System.out.println();
QuickSort qs = new QuickSort();
qs.quick(source, 0, source.length-1);
for(int i = 0;i<source.length;i++){
System.out.print(source[i]+",");
}
}
}
我发现这里一篇文章也是写了个快排的,不过他写的比我好,地址贴一下: 点击打开链接