您的位置:首页 > 理论基础 > 数据结构算法

数据结构之快速排序

2017-03-16 20:32 225 查看
以前对快速排序,仅仅停留在记忆代码的阶段,今天,我真正理解了该排序算法的原理,利用自己脑袋中的理解,在这里用Java语言实现,以便自己以后复习。


快速排序

package sort;

/**
* @packagname:sort
* @classname:FastSort
* @date:2017/2/21
* @author:cullinans
* @des:  快速排序
*/

public class FastSort {
public static void main(String[] args){
int[] arr={6,1,2,7,9,3,4,5,10,8};
diguisort(arr,0,arr.length-1);
for(int i:arr){
System.out.println(i);
}
}
public static void diguisort(int[] arr,int start,int tail){//递归调用
if(start>=tail)
return;
int index=myFastSort(arr,start,tail);
diguisort(arr,start,index-1);
diguisort(arr,index+1,tail);
}
public static int myFastSort(int[] arr,int start,int tail){//快速排序
int key=arr[start];//定所要排序数组的第一个数作为基数
int m=start;//记录开始下标
while(tail>start){//限定下标在所要排序数组范围内
while(arr[tail]>key && tail>start){
tail--;
}//从后往前遍历数组中的数,如果比基数大,则向前移动下标,跳出循环时的下标就是从后往前第一个比基数小的数
while(arr[start]<=key && tail>start){
start++;
}//从前往后遍历数组中的数,如果比基数小则向后移动下标,否则,跳出循环,记录下标
int temp;
if(start==tail){
temp=arr[start];
arr[start]=key;
arr[m]=temp;
return start;
}else{//如果下标不相等,则交换两个位置的值
temp=arr[start];
arr[start]=arr[tail];
arr[tail]=temp;
}
}
return start;
}
}


运行结果截图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息