算法学习之排序:快速排序算法
2015-11-21 15:43
423 查看
算法是程序的灵魂
2)以第一个元素作为关键数据, 赋值给key,即key=A[0]
3)从j开始向前搜索(j- -),找到第一个小于key的值A[j],记录此时的位置,j
4)从i开始向后搜索( i++ ),找到第一个大于key的值A[i],记录此时的位置,i
5)交换A[i]于A[j]的值
6)重复3),4),5)的操作,直到i=j,然后交换A[i]与key的值
7)递归调用,将数组分左右两部分重复以上所有步骤。
参考资料:
/article/4122575.html
1.简介
假设待排序数组为:A[0]…A[N-1]。取第一个数据A[0]作为关键数据,将所有比它小的数放在它前面,所有比它大的数放在它后面。这个过程称为一趟快速排序。递归调用“一趟”的操作,对数组进行分半处理。2.算法描述
1)设置两个变量i、j,排序开始的时候 i = 0, j = N-12)以第一个元素作为关键数据, 赋值给key,即key=A[0]
3)从j开始向前搜索(j- -),找到第一个小于key的值A[j],记录此时的位置,j
4)从i开始向后搜索( i++ ),找到第一个大于key的值A[i],记录此时的位置,i
5)交换A[i]于A[j]的值
6)重复3),4),5)的操作,直到i=j,然后交换A[i]与key的值
7)递归调用,将数组分左右两部分重复以上所有步骤。
3.代码
//定义一个类QuickSort public class QuickSort{ Integer[] arr; QuickSort(Integer[] arr){ this.arr = arr; } public void sort(int left,int right){ int i = left;//记录低位 int j = right;//记录高位 int t = 0;//交换数据的中间变量 int key = 0;//基准数 if(left > right){ return; } key = arr[left];//以最左侧数据为基准数 while(i != j){ //从右边开始找,找到比key小的数 while(arr[j] >= key && i < j){ j--; } //从左边开始找,找到比key大的数 while(arr[i] <= key && i < j){ i++; } //交换找到的比key小的数和比key大的数 if(i < j){ t = arr[j]; arr[j]= arr[i]; arr[i] = t; } }//while //将基准数放置于中间位置,它左边数全部小于它,右边全部大于 arr[left] = arr[i]; arr[i] = key; //递归调用 sort(left,i-1); sort(i+1,right); } } //测试类TestClass public class TestClass{ public static void main(String[] args){ Integer[] list = {1,9,3,8,4}; QuickSort quickSort = new QuickSort(list); quickSort.sort(0,list.length-1); for(int i = 0;i<list.length;i++){ System.out.print(list[i]+" "); } } }
参考资料:
/article/4122575.html
相关文章推荐
- 【学神】1-1 linux简介
- VB 加载winIO,实现驱动级键盘模拟
- 项目管理过程4W1H
- FileItem类的常用方法
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据[转]
- Effective Objective-C 2.0 — 第一条:了解Objective-C语言的起源
- J2EE实验3:猜数游戏
- POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)
- 虚拟机克隆后eth0网卡变成eth1网卡并且IP地址消失问题解决
- 计算机网络(第6版):自顶向下方法-资源文件
- 链接
- 1136: HH生病了
- Matlab在字符界面下转成C语言代码
- CSS基础学习十五:盒子模型补充之外边距合并
- python 下 字体/背景颜色
- jQuery实现分隔条左右拖动功能
- python学习笔记(8)
- SpringMVC访问静态文件出错
- android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())
- 获取Android签名证书的公钥和私钥