`
dianziermu
  • 浏览: 140645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【快速排序法】

阅读更多

【快速排序法】
也是一种交换排序法,实际上它是冒泡法的改进。

【算法】
思想是:一次划分使整个元素部分有序,即从序列中任选一个元素,然后对其它元素进行这样的划分,使得所有比它小(大)的元素在左侧而所有比它大(小)的元素在右侧,然后用分治的思想对左右侧的序列同样的处理,直到只有一个元素为止。

 

 

/**
 * 
 */
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;
	}

}
 

 

分享到:
评论

相关推荐

    C经典算法之快速排序法(三)

    ### C经典算法之快速排序法(三) 在探讨快速排序法的过程中,我们已经了解到轴的选择对于算法效率至关重要。本文将介绍一种高效的轴选择方法,该方法来源于著名的算法书籍《Introduction to Algorithms》。通过...

    快速排序法的C++代码

    ### 快速排序法的C++实现 #### 算法概述 快速排序是一种非常高效的排序算法,由英国计算机科学家托尼·霍尔于1960年提出。它的基本思想是采用分治策略来把一个序列分为较小的两部分,然后递归地对这两部分进行排序...

    快速排序法 C++ 初学者代码

    快速排序法 C++ 初学者代码 简单的准确的

    使用快速排序法对一维数组进行排序

    描述中的程序实现了快速排序法,可能是用一种编程语言如C++、Java或Python编写的,用于对一维数组进行排序。这种程序的实现一般包括上述的三个主要步骤,并可能包含优化措施,例如处理小数组时改用插入排序,或者...

    快速排序法C语言详解

    快速排序是一种高效的排序算法,它使用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。在C语言中实现快速排序,通常涉及到以下几个关键知识点: 1. 递归函数:快速排序的核心是递归...

    直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现)

    直接排序法、折半插入法、希尔排序法和快速排序法是计算机科学中常见的排序算法,它们在数据处理和算法理解上都具有重要的地位。这些排序算法的C语言实现为初学者提供了很好的学习材料,特别是在VC++6.0环境下进行...

    java Document 快速排序法

    然而,标题中的"java Document 快速排序法"可能指的是在一个包含文档数据的结构(如数组)中实现快速排序,而不是直接在Document对象上操作。由于Document主要处理文本数据,我们通常不会直接在Document上进行数值...

    JAVA快速排序法.pdf

    JAVA快速排序法 JAVA快速排序法是一种高效的排序算法,属于选择排序的一种。它的主要思想是通过选择一个基准元素,将数组分成两个部分:一部分比基准元素小,一部分比基准元素大,然后递归地对这两个部分进行排序。...

    一个快速排序法的例子

    在描述中提到的“一个快速排序法的例子”是一个具体的应用场景,即生成1亿个随机数并使用快速排序算法对其进行排序,整个过程大约耗时26秒。这个时间可能因硬件性能、数据分布均匀性以及实现细节等因素而有所不同。...

    Java版快速排序法

    这是一个用Java语言实现的快速排序算法,快速排序算法是根据分冶思想去实现的。

    快速排序法 排序算法

    快速排序法是计算机科学中一种高效的排序算法,其时间复杂度在平均情况下为O(nlogn),这使得它成为处理大规模数据集时的首选排序算法之一。快速排序法由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出,基于...

    快速排序法改进版

    在快速排序法基础上提供了一些改进,比基本的快速排序更方便简洁

    快速排序法

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治策略,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再...

    用JAVA语言实现的对数据的快速排序法

    根据给定文件中的标题、描述、标签以及部分内容,可以总结并提炼出以下关于“使用JAVA语言实现的对数据的快速排序法”的相关知识点: ### 一、知识点概述 #### 标题:用JAVA语言实现的对数据的快速排序法 - **主要...

    代码包_分治法快速排序法示例_

    在这个"代码包_分治法快速排序法示例_"中,我们将深入探讨快速排序的工作原理、实现过程以及它在实际编程中的应用。 快速排序的基本步骤如下: 1. **选择基准元素**:首先,我们需要在待排序的数组中选择一个基准...

    java快速排序法

    清楚明确的代码书写,让你轻易学懂快速排序法

    c 语言 快速排序法

    ### c 语言快速排序法知识点解析 #### 快速排序法简介 快速排序是一种非常高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出。它采用分治策略来把一个序列分为较小的两个子序列,再递归地...

    C经典算法之快速排序法(二)

    ### C经典算法之快速排序法(二) #### 知识点概述 本篇文章将深入探讨快速排序算法的一个改进版本,并通过具体的代码实现来展现这一优化思路。在快速排序法(一)的基础上,本文重点关注轴的选择对算法性能的影响...

    C经典算法之快速排序法(一)

    ### C经典算法之快速排序法(一) #### 快速排序法概述 快速排序法(Quick Sort)是一种高效的排序算法,被广泛认为是目前最快的排序方法之一,尤其是在处理大规模数据时,其平均时间复杂度为O(nlogn),在实际应用...

Global site tag (gtag.js) - Google Analytics