`
EmmaZhao
  • 浏览: 33703 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

排序算法(二)

 
阅读更多
package sort;

import java.util.Random;

public class QuickSort {
	private int[] input;
	private int partition(int[] input,int p,int r){
		int x = input[r];
		
		int i = p -1;
		
		for(int j = p; j< r;j++){
			if(input[j] <= x){
				i++;
				
				int temp = input[i];
				input[i] = input[j];
				input[j] = temp;
			}
					
		}
		int temp = input[i+1];
		input[i+1] = input[r];
		input[r] = temp;
		
		return i + 1;
	}
	
	public void out(){
		for(int i = 0;i< input.length; i++){
			System.out.print(input[i] + " ");
		}
		System.out.println();
	}
	public QuickSort(int[] input){
		this.input = input;
	}
	public void quickSort(){
		sort(input,0,input.length -1 );
	}
	
	private void sort(int[] input,int p,int r){
		if(p<r){
			int q = partition(input, p, r);
			
			sort(input, p, q-1);
			sort(input, q+1, r);
		}
	}

	public int randomPartition(int[] input,int p,int r){
		int i = random(p, r);
	
		int temp = input[i];
		input[i] = input[r];
		input[r] = temp;
		
		return partition(input, p, r);
	}
	
	public void randomQuickSort(){
		randomQuickSort(input, 0, input.length -1);
	}
	private void randomQuickSort(int[] input,int p,int r){
		if(p < r){
			int q = randomPartition(input, p, r);
			
			randomQuickSort(input, p, q-1);
			randomQuickSort(input, q+1, r);
		}
	}

	public static int random(int p,int r){
		return new Random().nextInt(r + 1 -p) + p;
	}
	private int hoarePartition(int input[],int p,int r){
		int x = input[p];
		int i = p;
		int j = r;
		
		while(true){
			while(input[j] > x){
				j-- ;
			}
			while(input[i] < x){
				i++ ;
			}
			if(i < j){
				int temp = input[i];
				input[i] = input[j];
				input[j] = temp;
			}
			else{
				return j;
			}
		}
	}
	
	private void hoareSort(int input[],int p,int r){
		if(p < r){
			int q = hoarePartition(input, p, r);
			
			hoareSort(input, p, q -1);
			hoareSort(input, q +1, r);
		}
	}
	
	public void hoareSort(){
		hoareSort(input, 0, input.length -1);
	}
	
	public static void main(String[] args){
		int[] input = {2,8,7,1,3,5,6,4};
	
		for(int j = 0; j < input.length;j++){
			System.out.print(input[j] + " ");
		}
		System.out.println();
		
		QuickSort sort = new QuickSort(input);
//		sort.quickSort();
//		sort.randomQuickSort();
		sort.hoareSort();
		sort.out();
	
	}
}

分享到:
评论

相关推荐

    最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构

    在计算机科学领域中,排序算法是一种基本的算法,它可以将数据按照一定的顺序排列,以便更好地存储、检索和处理数据。排序算法的速度和效率对程序的性能有着至关重要的影响。 1.冒泡排序算法 冒泡排序算法是一种...

    二维排序算法 选择排序 C#二维数组实现

    二维排序算法在计算机科学中是一种相对较少被提及的概念,因为大多数排序问题集中在一维数据上。然而,在处理矩阵或表格数据时,二维排序可能会变得重要。在这个案例中,我们讨论的是一个C#实现的选择排序算法,它...

    python常用排序算法汇总

    该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...

    js排序算法动态展示

    js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js...

    常用排序算法总结 常用排序算法总结 常用排序算法总结

    常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...

    各种排序算法比较

    - **稳定排序**:插入排序、冒泡排序、二叉树排序、二路归并排序以及其他线性排序算法都是稳定的。 - **不稳定排序**:选择排序、希尔排序、快速排序以及堆排序则是不稳定的。 #### 二、时间复杂度比较 时间复杂度...

    各种排序算法比较(java实现)

    在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在数据处理和数据分析中起着关键作用。本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并...

    排序算法(C语言实现)

    在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让...

    排序算法 各种算法的综合

    【排序算法】是计算机科学中的基础且至关重要的概念,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。由于在实际应用中,我们经常需要处理大量的数据,因此【排序算法】的效率至关重要。衡量算法效率...

    各种排序算法性能的比较

    各种排序算法性能的比较 在计算机科学中,排序算法是将一组数据按照一定的顺序排列的过程。排序算法的性能直接影响到数据处理和分析的效率。本课程设计中,我们将对八种内部排序算法的性能进行分析和比较。 1. ...

    数据结构内部排序算法比较.doc

    1. **增加排序算法**:可以进一步增加其他排序算法,如折半插入排序、二路插入排序、归并排序、基数排序等,以获得更全面的对比结果。 2. **扩展实验范围**:除了比较关键字的比较次数和移动次数外,还可以考虑不同...

    排序算法.pdf

    陕西科技大学学校的排序算法实验,最近小咲写的: 一、实验目的 1. 熟练运用冒泡排序、选择排序、插入排序、希尔排序、快速排序、合并排序、堆排序等七种常见的内排序算法 2. 使用不同的数据结合计算各种算法的运行...

    排序算法实验报告

    希尔排序,冒泡排序、快速排序递归排序,快速排序非递归排序,快速排序改进算法

    用C语言实现常用排序算法

    本项目旨在实现并比较六种经典的排序算法——直接插入排序、折半插入排序、起泡排序、简单选择排序、堆排序以及2-路归并排序,使用C语言编程。为了全面评估这些算法,我们将在一组随机生成的30000个整数上运行它们,...

    查找与排序算法的实现和应用

    查找与排序算法的实现和应用 查找算法是计算机科学中的一种基本算法,用于在数据结构中搜索某个特定的值或记录。常见的查找算法有顺序查找、二分法查找、快速查找等。 在顺序查找算法中,我们需要从头到尾遍历整个...

    常用排序算法的动态演示系统

    常用排序算法的动态演示系统 在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,...

    查找算法和排序算法小结

    本文总结了常见的查找算法和排序算法,包括顺序查找、二分查找、选择排序、冒泡排序、二分排序、插入排序、希尔排序、堆排序、归并排序等。 一、查找算法 1. 顺序查找(Sequential Search) 顺序查找是一种简单...

    算法与数据结构的排序算法

    二、排序算法的分类 1. 冒泡排序:这是一种简单的交换排序,通过重复遍历待排序的序列,依次比较相邻元素并交换位置,使得较大的元素逐渐“冒”到序列末尾。 2. 插入排序:它的工作原理类似于手动整理扑克牌,每次...

    数据结构课程设计(内部排序算法比较_C语言)

    #### 二、内部排序算法概述 内部排序算法是指所有待排序的数据全部存放在内存中进行排序的过程。常见的内部排序算法包括但不限于: 1. **直接插入排序**:逐个遍历列表中的每个元素,将其插入到已排序序列的正确...

Global site tag (gtag.js) - Google Analytics