[JAVA]快速排序
来源:互联网 发布:淘宝登陆不了怎么回事 编辑:程序博客网 时间:2024/06/10 16:31
package sort_book_datastruction;import java.util.ArrayList;import java.util.Arrays;/** * 快速排序: * 基本思想:通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字比另一部分记录的关键字小, * 则可以分别对两部分记录继续进行排序,以达到整个序列有序; * 每一趟能够将枢轴元素放在正确的位置上。 *具体做法:附设两个指针low和high,他们的初值分别是low和high,设枢轴记录的关键字为pivotkey, * 则首先从high所指的位置起向前搜索找到第一个关键字小于pivotkey的记录和枢轴互相交换, * 然后从low所指的位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴互相交换, * 重复这两步,直至low=high为止; *改进:每交换一对记录需进行三次记录赋值操作,而实际过程中对枢轴记录的赋值是多余的,因为只有一趟排序结束时,即 * low=high的位置才是枢轴记录的最后位置。 * @author Administrator * */public class QuikSort {// public void swap(int[] array,int low,int high){// int temp = array[low];// array[low] = array[ high];// array[high] =temp;// } public int getMiddle(int[] array,int low ,int high){ if(array.length <=0) return -1; int pivotkey = array[low];//用子表的第一个记录作为基准元素 while(low<high){ //从表的两端交替的向中间扫描 while(low<high&&array[high]>=pivotkey) high--; //swap(array,low,high); array[low]=array[high];//改进的方法;将比枢轴记录小的记录移动到低端; while(low<high &&array[low]<=pivotkey) low++; //swap(array,low,high); array[high]=array[low];//将枢轴记录大的记录移动到高端; } array[low] = pivotkey;//枢轴记录到位; return low; } public void Qsort(int[] array,int low,int high){ if(low<=high){//长度大于1 int pivotloc = getMiddle(array,low,high);//将顺序表array一分为2 Qsort(array,low,pivotloc-1);//对低子表做递归排序 Qsort(array,pivotloc+1,high);//对高子表做递归排序 } } public static void main(String[] args) { // TODO Auto-generated method stub QuikSort qs = new QuikSort(); int[] array = {49,38,65,97,76,13,27,49}; qs.Qsort(array, 0, array.length-1); System.out.println("QUickSort:"+Arrays.toString(array)); }}
阅读全文
0 0
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- 【C/C++】Maximum Subsequence Sum/最大子列和问题
- JAVA中Icon绘图
- [JAVA]堆排序
- C++内存管理
- Innosetup状态页面和向导页面解释
- [JAVA]快速排序
- Java中的Exception
- 嵌入式软件设计层级划分概念
- poj1155 TELE(树形dp)
- spring 简单使用AOC使用
- 0002 2014蓝桥-练习 切面条
- matlab匿名函数
- python学习网址
- Web应用规范