`
endual
  • 浏览: 3560964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据结构与算法 快速排序

    博客分类:
  • java
 
阅读更多

 

package endual.huafen.quickly.writeagain;

/**
 * 快速排序1:
 * 
 * 其思想也是递归排序的,首先我们要有划分,随便选取一个key值,小的数放在这个key的左边,大的数就放在key的右边
 * 然后递归就OK了。放在key值的左边和右边的数并没被排序好的,所以还是要进行排序的
 * 
 * 
 * @author Endual
 *
 */
public class QuickSort1 {

	private long[] theArray ; //创建了一个数组,这个数组是用来存放要进行的排序的数据的
	private int    nElems ; //记录有多少个数据要进行排序的
	
	public QuickSort1(int max) {
		this.theArray = new long[max] ; //存入数据的最大的个数吧
		this.nElems = 0 ; //初始化记录的个数
	}
	//插入数据的,一次插入一次
	public void insert(long value) {
		
		this.theArray[this.nElems] = value ; 
		this.nElems++ ; //插入一次记录就增加一次
	}
	//返回当前数组中有多少个数据要进行排序
	public int size() {
		
		return this.nElems ;
	}
	
	//显示当前数据的排序
	public void display() {
		int size = this.size() ;
		for (int i=0; i < size; i++) {
			
			System.out.println(this.theArray[i]);
		}
	}
	
	//快速排序的调用方法
	public void qucikSrot() {
		
		recQucikSort(0, this.nElems-1) ;//输入的是数组的最前面一个0 和 最后面一个nElems-1
	}

	
	
	private void recQucikSort(int left, int right) {

		if (right - left <= 0) { //递归终止的条件,当开始的标号小于或者等于右边的标号的时候就停止
			return ;
		}
		
		else {
			
			long pivot = this.theArray[right] ; //默认最右边的数据项作为那个key值
			
			
			//返回的是pivot的位子,
			//当然已经进行了划分排序
			//这个是快速排序的核心所在
			int partition = partitionIt(left,right,pivot) ; 
			
			recQucikSort(left, partition-1) ; //递归left到这个key值的这么一段的
			recQucikSort(partition+1, right) ; //递归这个key值+1,这个位子到右边的数据
			
		}
		
	}

	//快速排序的划分核心
	private int partitionIt(int left, int right, long pivot) {
		
		int leftPtr = left - 1 ; //左边和右边的两个指针
		int rightPtr = right ;
		
		while (true) {
			
			while (this.theArray[++leftPtr] < pivot) ; //找到大的item,那么就找了左边的位子上,其中一个值是要大于key值的
			
			while (rightPtr > 0 && this.theArray[--rightPtr] > pivot) ; //找到小的item,那么就找了右边的其中一个值是大于key值的 交换位子哦
			
			if (leftPtr >= right) { //终止的条件就是当左边的指针小于右边的指针或者等于右边的时候
				break ; 
			}else {
				swap(leftPtr, rightPtr) ;
			}
		}
		
		this.swap(leftPtr, right) ; //把关键词要交换下位子的
		return leftPtr;
	}

	private void swap(int leftPtr, int rightPtr) {
		
		long temp = this.theArray[leftPtr] ;
		this.theArray[leftPtr] = this.theArray[rightPtr] ;
		this.theArray[rightPtr] = temp ;
		
	}
	
	
}

 

今天很不顺利啊 为什么就不能弄出来呢 ?

 

main:

 

package endual.huafen.quickly.writeagain;

public class QuickSort1App {

	
	public static void main(String[] args) {
		
		QuickSort1 app = new QuickSort1(19) ;

		app.insert(4) ;
		app.insert(56) ;
		app.insert(21) ;
		app.insert(5) ;
		app.insert(43) ;
		app.insert(9) ;
		app.insert(45) ;
		
		app.display() ;
		System.out.println("--------------");
		app.qucikSrot() ;
		
		app.display() ;
		
		
	}

}

 

排序结果

 

4
56
21
5
43
9
45
--------------
56
9
4
21
5
43
45
 

 

分享到:
评论

相关推荐

    c语言 数据结构 快速排序算法

    c语言版本的数据结构的快速排序算法,适用于新手学习

    数据结构与算法之排序

    在IT领域,数据结构与算法是基础且至关重要的部分,特别是排序算法,它们在软件开发中扮演着核心角色。本文将深入探讨“数据结构与算法之排序”,重点关注内部排序和外部排序。 首先,我们理解一下数据结构。数据...

    哈工大数据结构实验5_冒泡排序与快速排序

    (1) 冒泡排序和快速排序; (2) 插入排序和希尔排序; (3) 选择排序和堆排序; (4) 递归和非递归的归并排序。 2. 产生不同规模和分布的数据,以 Excel 生成算法执行时间 T(n)关于输入规模 n 的曲线的形式,...

    数据结构与算法 数据结构与算法课后习题答案

    数据结构与算法是计算机科学的基础,它涉及到如何有效地组织和管理数据,以便进行高效地查找、存储和处理。本资源包含的数据结构与算法课后习题答案,是学习这一领域的重要辅助材料,可以帮助学生深入理解和巩固所学...

    数据结构实验-排序算法

    排序算法则是数据结构中的重要部分,它们用于对一组数据进行有序排列。在这个实验中,我们将关注六种不同的排序算法:选择排序、冒泡排序、插入排序、基数排序以及快速排序和归并排序。下面是对这些排序算法的详细...

    数据结构实验4快速排序

    数据结构实验4快速排序 在本实验中,我们将学习快速排序算法的实现,以学生的考试成绩单为例,对其进行排序并输出每个学生的名次、学号、姓名和成绩。 一、快速排序算法原理 快速排序是一种基于比较的排序算法,...

    数据结构与算法分析--C语言描述_数据结构与算法_

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C语言因其高效、底层特性,常被用于实现数据结构和算法,使得程序更接近硬件,性能更优。本资源"数据结构与算法分析--C语言描述"是针对数据...

    数据结构 快速排序 排序算法

    数据结构排序算法中的快速排序,是非常重要的一个算法,从时间上来看,是在随机情况下排大量数据的最优选择

    JS数据结构与算法.pdf

    JS 数据结构与算法.pdf 本书主要介绍了 JavaScript 语言的基础知识,包括数据结构和算法。以下是该书的详细知识点: 一、JavaScript 基础知识 * 变量和数据类型 * 运算符和控制结构 * 函数和对象 * 数组和字符串 ...

    数据结构_快速排序

    严蔚敏版的《数据结构》是一本经典的数据结构教材,书中详细介绍了各种数据结构及其操作,包括快速排序在内的各种排序算法。第八章可能涵盖了快速排序的基本概念、算法实现、时间复杂度分析以及优化策略等内容。 ...

    数据结构与算法分析—c语言描述

    《数据结构与算法分析—C语言描述》是一本深度探讨数据结构和算法的书籍,它以C语言作为实现工具,为读者提供了丰富的编程实践指导。这本书涵盖了数据结构的基础理论、设计方法以及C语言的实现技巧,是计算机科学...

    武汉大学 C#数据结构与算法

    5. **课程内容**:可能包括基础数据结构的实现、算法设计与分析、复杂度理论、高级数据结构(如堆、B树等)、图算法、排序与查找算法的C#实现、动态规划和贪心策略等。 6. **学习资源**:“C#数据结构与算法_武汉...

    数据结构与算法教程

    数据结构与算法是计算机科学的核心内容,它们在解决实际问题、提高程序效率以及编写高质量软件中扮演着至关重要的角色。数据结构是计算机存储、组织数据的方式,它可以帮助我们在计算机中以更加高效和合适的方式表示...

    C++数据结构与算法 (第4版)

    根据提供的文件信息,这里主要关注的是“C++数据结构与算法(第4版)”这一主题,虽然实际内容并未给出具体章节或知识点,但我们可以基于标题、描述以及部分已知内容来推测书中可能涵盖的关键知识点。 ### C++数据...

    数据结构与算法 Java版

    数据结构与算法是计算机科学的基础,对于任何编程语言来说,理解和掌握它们都是至关重要的,特别是对于Java这样的高级语言。在Java中实现数据结构和算法,能够帮助开发者更高效地解决问题,提升程序性能。 数据结构...

    java数据结构与算法.pdf

    在编程领域,数据结构与算法是核心组成部分,它们直接影响到程序的效率和性能。Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点...

    数据结构与算法分析C++描述(附源码)

    数据结构与算法分析是计算机科学中的核心课程,它关乎如何高效地存储和处理数据,以及设计和实现高效的计算过程。C++作为一种强大的编程语言,常用于实现这些数据结构和算法,因为它提供了丰富的库支持和面向对象的...

    恋上数据结构与算法第二季课件pdf

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。在"恋上数据结构与算法第二季"的课程中,我们深入探讨了这个领域的核心概念。本课程旨在通过丰富的实例和详细的解释,帮助学习者掌握这些关键...

Global site tag (gtag.js) - Google Analytics