`
come_for_dream
  • 浏览: 120294 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

快速排序思想及其算法实现

 
阅读更多

                           快速排序思想及其算法实现

 

 

快速排序(Quicksort)是对冒泡排序的一种改进。O(N*logN)的算法复杂度使它得到了广泛的应用。

算法的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中的一部分的所有数据都比另一部分都要小,然后按此方法分别对这两部分再分别进行快速排序,这呢哥哥排序过程可以递归处理。

<!--EndFragment-->

以此达到整个数据变成有序序列。

 

算法的过程为:

1.制定杻轴(一般是第一个元素)

2.通过一趟排序将一杻轴为中心,把待排记录分割成独立的两部分,使得左边的记录的关键字小于杻轴值,右边的记录大于杻轴值

3.对左右两部分记录序列重复上述过程,以此类推,直到子序列中只剩下一个记录或不含记录为止

 

 

对于

数据:25   21   65   2   35   7   5   43  

 

第一趟排序的结果:5   21   7   2   25     35   65   43  

第二趟排序的结果:  5   7   21   25   35   65   43 

第三趟排序的结果:2   5   7   21   25   35   65   43 

第四趟排序的结果:2   5   7   21   25   35   65   4

第五趟排序的结果:2   5   7   21   25   35   43   65

第六趟排序的结果:2   5   7   21   25   35   43   65

 

 

 

代码:

/**
	 * 快速排序
	 * 
	 * @param args
	 */

	public void quickSort(int a[], int left, int right) {
		int q;
		if (left < right) {

			q = partition(a, left, right);
			quickSort(a, left, q - 1);
			quickSort(a, q + 1, right);
			
			
		}

	}

	private int partition(int[] a, int left, int right) {
		int s;

		s = a[left];
	
		while (left <right){

			//向左判断
			while (a[right] > s) {
				right--;
			}
			if(left<right){
				int temp = a[left];				
				a[left] = a[right];
				a[right] = temp;
				left++;
			}
			
			//向右判断
			while (a[left] < s) {
				left++;
			}
			//交换
			if(left<right){
				int temp = a[left];				
				a[left] = a[right];
				a[right] = temp;
				right--;
			}			
			 
		
		}
		//打印数组
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "   ");		
		}
		System.out.println();


		return left;
	}

 

分享到:
评论

相关推荐

    7大排序算法实现程序(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)

    本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...

    C语言6种排序算法及其实现

    以下将详细阐述标题和描述中提到的6种排序算法及其C语言实现。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并根据需要交换它们来实现排序。它保证了相同元素的...

    快速排序算法及其改进算法的分析与评价.doc

    总结,快速排序及其改进算法的研究有助于我们理解排序算法的内在机制,优化算法性能,以适应各种实际场景的需求。通过对传统快速排序的局限性进行改进,如双倍快速排序,我们可以设计出更高效、更稳定的排序算法,...

    快速排序算法实现 c#代码

    ### 快速排序算法在C#中的实现 #### 一、快速排序算法简介 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出。该算法采用分治策略来把一个序列分为较小的两个子序列,再对这...

    快速排序优化算法

    Java语言的快速排序优化算法实现 算法思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程...

    C++实现的快速排序算法(运行通过)

    ### C++实现的快速排序算法知识点解析 #### 快速排序简介 快速排序是一种非常高效的排序算法,由英国计算机科学家托尼·...通过以上分析,我们可以更深入地理解快速排序算法的实现细节及其在实际应用中的考量因素。

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

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

    常用数据结构及其算法的Java实现

    本项目主要使用Java实现各种经典常用数据结构及其算法,包括但不仅限于链表、栈,队列,树,图等经典数据结构。 八大排序算法及其实现,具体包括直接插入排序,希尔排序,直接选择排序,堆排序,冒泡排序,快速排序...

    并行计算实验快速排序的并行算法.doc

    并行计算实验旨在深入理解和掌握快速排序算法,包括其串行和并行版本。...通过这样的实验,学生不仅能理解快速排序的原理,还能体验到并行计算如何提升算法效率,同时掌握MPI通信机制及其在算法实现中的应用。

    Java 七种排序算法实现

    本资源包含了七种经典的排序算法实现,它们分别是冒泡排序、插入排序、递归排序(这里可能是指归并排序)、基数排序、快速排序、选择排序和希尔排序。下面我们将详细探讨这些排序算法的工作原理和实现方式。 1. **...

    快速排序 数据结构 实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....以上就是关于快速排序的基本原理、实现细节及其测试策略的详细说明。在实际编程中,理解和掌握快速排序的这些知识点对于编写高效的排序代码至关重要。

    冒泡、快速排序算法比较程序.zip_快速排序算法_排序算法比较_数据结构课程设计

    本项目着重探讨了两种经典的排序算法——冒泡排序和快速排序,并通过C语言进行了实现。这两种排序算法各有特点,理解它们的工作原理及其优缺点对于提升编程技能和理解算法效率至关重要。 **冒泡排序** 是一种简单...

    PHP排序算法之快速排序(Quick Sort)及其优化算法详解

    快速排序算法由于其实现简单、平均时间复杂度低且速度快,被广泛应用于各种编程语言和实际的软件开发中。在PHP中实现快速排序算法时,需要特别注意数组引用传递和变量的作用域问题,因为在PHP中默认的数组参数传递是...

    八大排序算法的MATLAB实现

    以下将详细阐述标题和描述中提到的八大排序算法及其MATLAB实现。 1. **直接选择排序(SelectSort)** 直接选择排序的基本思想是从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部...

    四种算法实现排序

    例如,可以使用`Sort()`方法对列表进行排序,但默认的`Sort()`方法是基于快速排序的,如果要实现上述四种算法,我们需要自定义排序函数或重写`IComparable`接口。 以上就是关于四种排序算法的基本介绍及其在C#中的...

    排序及基本算法

    快速排序则采用分治策略,选择一个基准元素,将数组分成小于基准和大于基准的两部分,递归地对这两部分进行排序,最终实现整体排序。 3. **选择排序**:包括直接选择排序、树型选择排序和堆排序。选择排序的基本...

    各种常用排序算法的C语言实现

    C语言是一种广泛应用的编程语言,尤其适合处理底层系统级任务和算法实现。本资源提供了各种常用排序算法的C语言实现,源自严蔚敏的经典教材《数据结构》。下面将详细介绍这些排序算法及其在C语言中的实现原理。 1. ...

    NlogN经典排序算法的实现-希尔排序,快速排序,归并排序.zip

    **希尔排序、快速排序与归并排序:NlogN经典排序算法详解** 排序算法是计算机科学中的基础且重要的一部分,尤其是在处理大量数据时,高效排序能够显著提升程序性能。本资料包聚焦于三类时间复杂度为O(nlogn)的经典...

    几种不同排序的比较及其算法

    这里我们将深入探讨几种常见的排序算法,包括插入排序、快速排序以及堆排序,它们各自有其特点和适用场景。 首先,我们来看插入排序(Insertion Sort)。插入排序是一种简单的排序算法,其基本思想是将待排序的数据...

    用C语言实现成绩表的快速排序程序设计

    快速排序是一种高效的排序算法,其基本思想是通过选取一个"枢轴"元素,将数组划分为两部分,使得一部分的所有元素都小于枢轴,另一部分的所有元素都大于枢轴,然后对这两部分再进行同样的排序操作,直至整个数组有序...

Global site tag (gtag.js) - Google Analytics