`
yuxingfirst
  • 浏览: 50574 次
  • 性别: Icon_minigender_1
  • 来自: 湘潭
社区版块
存档分类
最新评论

算法研究系列---快速排序

 
阅读更多

快速排序是由冒泡排序改进而来的.

算法思想:  

             在待排序的n个记录中,选取其中任意一个记录(通常是第一个),把该记录放在适当的位置后,则数据序列被划分为两部分。所有比该记录小的记录均放置到该记录的前一部分;所有笔该记录大的记录均放置到该记录的后一部分,并把该记录排在这两部分的中间(称该记录为记录归位),这个过程成为一趟快速排序。   之后对所有的两部分分别重述这一过程,直至每部分内只有一个记录或为空为止。简而言之,每趟使得一个记录放到适当位置,将表一分为二,对子表按递归的方式继续这种划分,直至划分的子表长度为1或0

package switchsort;

public class QuickSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[] { 5, 1, 9, 8, 6, 3, 2, 8, 6,584,54,125,6,5,147,85478,241,2412,365,256,985,589,895,745,487 };
		a = quickSort(a, 0, a.length - 1);
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "  ");
		}
	}

	public static int[] quickSort(int[] a, int start, int end) {
		int i = start;
		int j = end;
		int tmp;
		int middle = a[(start + end) / 2];
			while (i < j) {
				while (a[j] > middle) {
					j--;
				}
				while (a[i] < middle) {
					i++;
				}
				if (i <= j) {
					tmp = a[i];
					a[i] = a[j];
					a[j] = tmp;
					i++;
					j--;
				}
			}
			if (j > start) {
				quickSort(a, start, j);
			}
			if (i < end) {
				quickSort(a, i, end);
			}
		return a;
	}

	
}
 
1
2
分享到:
评论
3 楼 yuxingfirst 2011-10-10  
Mon__cherie 写道
无意中发现一个bug

当数组中有两个一样的数字事   while循环会死循环
  LZ注意了么?

嗯 看到了  谢谢! 代码已修正
2 楼 Mon__cherie 2011-10-09  
无意中发现一个bug

当数组中有两个一样的数字事   while循环会死循环
  LZ注意了么?
1 楼 fka2004 2011-10-09  
学习了,谢谢~~

相关推荐

    算法设计实验报告-快速排序和归并排序

    本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...

    数据结构与排序算法------通过代码示例,讲解:数据结构和9种排序算法。.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    《C常用算法程序集-徐士良》源代码

    1. **基础算法**:在源代码中,你将找到诸如排序、查找等经典算法的实现,如冒泡排序、插入排序、选择排序、快速排序、二分查找等。这些算法是所有编程学习者的基石,通过它们你可以理解数据结构和算法的基本思想。 ...

    算法导论--教师手册

    - **快速排序(Quick Sort)**:章节7讲解了快速排序算法,通过选择一个基准元素,将数组分为小于和大于基准的两部分,递归地进行排序。快速排序平均时间复杂度同样为O(n log n),但在最坏情况下退化为O(n^2)。 ###...

    算法入门系列2-在水一方1

    - **排序算法** - 如冒泡排序、插入排序、选择排序、快速排序、归并排序等,它们的目标是将一组数据按照特定顺序排列。 - **查找算法** - 如线性查找、二分查找等,用于在数据集中寻找特定元素。 - **图算法** - ...

    算法---源文件(主要是算法里提及到的源文件,很详细。)

    1. 排序算法:如冒泡排序、快速排序、归并排序等,广泛应用于数据处理和数据分析。 2. 搜索算法:如二分查找、深度优先搜索、广度优先搜索,常用于数据检索和图形遍历。 3. 动态规划:解决最优化问题,如背包问题、...

    Fortran常用算法程序集-徐士良.rar

    该程序集可能包含了各种基础和进阶的算法,例如排序算法(如冒泡排序、快速排序、归并排序)、查找算法(如线性查找、二分查找)、数值计算方法(如牛顿法求根、欧拉方法解微分方程)、矩阵运算(如高斯消元法、LU...

    C常用算法程序集-徐士良著

    1. **排序算法**:快速排序、归并排序、冒泡排序、插入排序、选择排序、希尔排序等,这些都是处理数组和列表数据的重要工具。 2. **查找算法**:二分查找、线性查找、哈希查找等,用于在数据集中定位特定元素。 3....

    十五个经典算法研究与总结、目录+索引

    根据给定文件的信息,我们可以提炼出以下关于“十五个经典算法研究与总结”的知识点: ### 一、A*搜索算法 - **定义**:A*(A星)搜索算法是一种结合了最佳优先搜索和广度优先搜索优点的启发式搜索算法,它能够...

    LUT算法与数据结构--排序算法比较问题和教学计划编制问题

    常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等。每种算法都有其独特的性能特点,如时间复杂度、空间复杂度和稳定性。例如,冒泡排序虽然简单,但效率较低;快速排序则在平均情况下...

    CObList 快速排序算法代码

    ### CObList 快速排序算法详解 #### 一、引言 在计算机科学领域,数据结构与算法一直是核心研究内容之一。对于不同的应用场景,选择合适的排序算法至关重要。本篇文章将详细解读“CObList 快速排序算法代码”,...

    数据结构算法电子书------原版拷贝

    算法则是解决问题或执行任务的明确步骤,常见的有排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找算法(线性查找、二分查找、哈希查找)、图算法(Dijkstra算法、Floyd算法、Prim算法等)和...

    国科大计算机算法与设计-刘玉贵老师

    《国科大计算机算法与设计-刘玉贵老师》是一门深入探讨计算机算法与设计的课程,由知名教育专家刘玉贵教授...学生通过学习这门课程,能够掌握一系列高效的算法,为未来在计算机科学领域的研究和工作打下坚实的基础。

    LUT算法与数据结构--排序重构问题和教学学计划编制问题

    解决这类问题通常涉及到各种排序算法,如快速排序、归并排序、插入排序等,并结合特定的策略来实现所需的重构。 教学学计划编制问题是一个典型的组合优化问题,常见于学校管理或课程安排。目标是在满足课程时间、...

    算法之美-源码公布的总集合

    这个集合可能涵盖排序算法(如快速排序、归并排序、堆排序)、搜索算法(如二分查找、深度优先搜索、广度优先搜索)、图算法(如Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法)以及动态规划和贪心策略等...

    Fortran常用算法程序集-徐士良

    1. **排序算法**:例如快速排序、冒泡排序、插入排序和选择排序等,这些都是基础但重要的算法,用于对数组或列表进行有序排列。Fortran的数组操作能力使其在实现这些算法时表现出色。 2. **搜索算法**:如线性搜索...

    VB 常用算法数据集-随书源码

    每个文件都可能包含不同的VB算法实现,比如快速排序、冒泡排序、二分查找、图的遍历等。通过分析和运行这些源码,开发者可以了解如何在VB中有效地处理数据和解决实际问题。同时,这也有助于他们理解VB的语法和面向...

Global site tag (gtag.js) - Google Analytics