【快速排序法】
也是一种交换排序法,实际上它是冒泡法的改进。
【算法】
思想是:一次划分使整个元素部分有序,即从序列中任选一个元素,然后对其它元素进行这样的划分,使得所有比它小(大)的元素在左侧而所有比它大(小)的元素在右侧,然后用分治的思想对左右侧的序列同样的处理,直到只有一个元素为止。
/**
*
*/
package com.dianzi.arith;
/**
* 快速排序,整个过程用递归算法设计,思想是分治的思想
* @author 点子二木
* @date 2009-5-12
* @version 1.0
*/
public class Quick {
/**
* @param args
*/
public static void main(String[] args) {
int list_length = 10;
InitList list = new InitList(list_length);
Quick quick = new Quick();
int[] tempArray = list.toArrayInt();
int[] resultArray = quick.quicksort(tempArray, 0, list_length - 1);
System.out.println("");
System.out.print("快速排序:");
for (int i = 0; i < resultArray.length; i++) {
System.out.print(resultArray[i] + " ");
}
}
/**
* 整个快速排序的过程用递归算法设计,思想当然是分治的思想:
*
* @param tempArray
* @param low
* @param high
* @return
*/
public int[] quicksort(int[] tempArray, int low, int high) {
// 对r[low],r[low+1],...r[high]进行快速排序
if (low < high) {
int k;
k = quickpass(tempArray, low, high);// 一次划分
quicksort(tempArray, low, k - 1);// 对左侧元素以同样的方法对待
quicksort(tempArray, k + 1, high);// 对右侧元素以同样的方法对待
}
return tempArray;
}
/**
* 一次划分的算法如下:
*
* @param tempArray
* @param low
* @param high
* @return
*/
public int quickpass(int[] tempArray, int low, int high) {
int i = low, j = high, x = tempArray[i]; // 置初值,i指最左端,j指最右端,选第i个元素为划分比较元素x
while (i < j) {
while ((tempArray[j] >= x) && (i < j))
--j;
// 自尾端进行比较,因为i处为空
if (i < j) {
tempArray[i] = tempArray[j];
i++;// 填入i处
while (tempArray[i] <= x && (i < j)) {
++i;
}
// 自首端进行比较,j处已空
if (i < j) {
tempArray[j] = tempArray[i];
j--;
}
}
}
tempArray[i] = x;// 一趟快速排序结束,将x移至正确位置
return i;// 返回划分比较元素的位置
}
}
初始化数组:
/**
*
*/
package com.dianzi.arith;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 初始化数组
* @author 点子二木
* @date 2009-5-12
* @version 1.0
*/
public class InitList {
private static int INIT_LIST_LENGTH = 1;
public List global_List = null;
public InitList(int length) {
initIntArrayList_falseRandom(length);
//initIntArrayList(length);
printList();
}
/**
* 产生伪随机列表
* @param length
*/
public void initIntArrayList_falseRandom(int length) {
global_List = new ArrayList(length);
INIT_LIST_LENGTH = length;
Random rd = new Random(20);
for (int i = 0; i < length; i++) {
int newNum = rd.nextInt(100);
global_List.add(newNum);
//System.out.print(newNum + " ");
}
}
/**
* 产生随机列表
* @param length
*/
public void initIntArrayList(int length) {
global_List = new ArrayList(length);
INIT_LIST_LENGTH = length;
for (int i = 0; i < length; i++) {
Integer newNum = Integer.valueOf((int) (Math.random() * 100)) ;
global_List.add(newNum);
//System.out.print(newNum + " ");
}
}
public void printList() {
if (global_List != null) {
System.out.println("");
System.out.print("打印列表:");
for (int i = 0; i < global_List.size(); i++) {
System.out.print(global_List.get(i) + " ");
}
}
}
public int[] toArrayInt() {
int[] result = new int[INIT_LIST_LENGTH];
if (global_List != null) {
for (int i = 0; i < global_List.size(); i++) {
result[i] = (Integer) global_List.get(i);
}
}
return result;
}
}
分享到:
相关推荐
之前说过轴的选择是快速排序法的效率关键之一,在这边的快速排序法的轴选择方式更加快了快速排序法的效率,它是来自演算法名书 Introduction to Algorithms 之中。
快速排序法 C++ 初学者代码 简单的准确的
利用matlab实现的快速排序法;详细解释请看:https://blog.csdn.net/fyf18845165207/article/details/85346084 内含C++语言实现
快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。 快速排序法的基本精神是在数列中...
void qsort(int arr[],int left,int right) //qsort()函数实现快速排序,并且是递归调用,而且,递归调用qsort()函数本身两次,因为要对中值两边的 { //部分分别进行排序。arr是待排序的数组名,left是排序的左边界,...
这是一个用Java语言实现的快速排序算法,快速排序算法是根据分冶思想去实现的。
在快速排序法基础上提供了一些改进,比基本的快速排序更方便简洁
使用快速排序法对一维数组进行排序,程序完全可以运行,方便大家学习
java Document 快速排序法 java Document 快速排序法 java Document 快速排序法
清楚明确的代码书写,让你轻易学懂快速排序法
快速排序法 程序 绝对原创 老师布置的作业 欢迎大家下载
直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现),适合初学数据结构的同学。全部程序都在VC++6.0调试通过。
c#中快速排序法算法代码实例,文档中的代码实测可用。
韩顺平老师的快速排序法源代码 经本人测试 完整无误 可以直接用
快速排序法 时间复杂度 O(n×lbn)
一个快速排序法的例子 构建1亿的随机数,完整排序花时26秒左右
Java 冒泡法,选择法,插入法,快速排序法,实现代码。
void QuickSort(int *pData, int left, int right) { int i, j; int middle, iTemp; i = left; j = right; ...middle = pData[(left + right) / 2];...while ((pData[i] ) && (i )) //从左扫描大于中值的数 ...
在快速排序法(一)中,每次将最左边的元素设为轴,而之前曾经说过,快速排序法的加速在于轴的选择,在这个例子中,只将轴设定为中间的元素,依这个元素作基准进行比较,这可以增加快速排序法的效率。