快速排序的原理:
选一个数组中的第一个元素作为参照物,把所有小于参照物的元素都放在参照物的左边,将所有大于参照物的元素都放在右边。在递归的各自的子数组。
定义两个指针,分别从前遍历和从后遍历,向前遍历时,如果小于参照物,交换他们的位置,向后遍历时,如果大于参照物,交换他们的位置。直到两个指针相遇。
package calc;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
int data[] = {110,305,65,57,90,120,110,8,79,44};
int min = 0;
int max = 9;
quickSort(data,min,max);
for(int temp : data)
System.err.println(temp);
}
public static void quickSort(int[] data,int min,int max){
int indexofpartition;
if(max>min){
//core
indexofpartition = findPartition(data,min,max);
quickSort(data,min,indexofpartition-1);
quickSort(data,indexofpartition+1,max);
}
}
public static int findPartition(int[] data,int min,int max){
int left,right,partitionIndex;
int temp,partitionelement;
partitionelement=data[min];
left=min;
right=max;
partitionIndex=min;
while(left<right){
while(data[right]>partitionelement&&left<right)
right--;
temp = data[right];
data[right] = data[partitionIndex];
data[partitionIndex] = temp;
partitionIndex = right;
while(data[left]<=partitionelement&&left<right)
left++;
if(left<right){
temp = data[left];
data[left] = data[partitionIndex];
data[left] = temp;
partitionIndex = left;
}
}
return partitionIndex;
}
}
归并排序
将一个数组分成两个数组,两个子数组再分两个子数组,直到每个子分组的元素个数都是1个,在将两个分组合并
左分组的元素和右分组元素比较,如果左的小就用左的,如果右的小就用右的。如果左分组或右分组有多余的元素,就直接添加到后面。
package calc;
public class MergeSort {
private static int count = 0 ;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] data = {110,305,65,57,90,120,110,8,79,44};
mergeSort(data,0,9);
for(int temp:data)
System.err.println(temp);
}
public static void mergeArray(int[] data,int left,int mid,int right){
int leftstart=left,leftend=mid;
int rightstart=mid+1,rightend=right;
int k = 0;
int size = right-left+1;
int[] temp = new int[size];
while(leftstart<=leftend&&rightstart<=rightend){
if(data[leftstart]>data[rightstart]){
temp[k++] = data[leftstart++];
}else{
temp[k++] = data[rightstart++];
}
}
while(leftstart<=leftend)
temp[k++] = data[leftstart++];
while(rightstart<=rightend)
temp[k++] = data[rightstart++];
for(int i=0;i<k;i++){
data[left+i] = temp[i];
}
}
public static void mergeSort(int[] data,int left,int right){
if(left<right){
int middle = (left+right)/2;
System.err.println((++count)+"次调用,middle:"+middle);
mergeSort(data,left,middle);
mergeSort(data,middle+1,right);
mergeArray(data,left,middle,right);
}
}
}
分享到:
相关推荐
**快速排序与归并排序算法比较实验报告** 在计算机科学中,排序算法是处理大量数据时不可或缺的一部分。这篇实验报告将深入探讨两种经典的排序算法——快速排序和归并排序,通过对它们在Java环境中的实现和性能测试...
快速排序和归并排序是两种常用的排序算法,它们在计算机科学和编程中有着广泛的应用。本文将详细讨论这两种排序算法的原理、实现方式以及性能对比。 快速排序是一种由C.A.R. Hoare在1960年提出的分治算法。其基本...
快速排序和归并排序是两种常用的排序算法,它们在计算机科学中扮演着重要的角色,尤其在数据处理和算法效率分析方面。快速排序是由C.A.R. Hoare在1962年提出的,而归并排序则是一种基于分治策略的排序算法。 快速...
快速排序、归并排序、基数排序等排序算法比较,比较时间性能,采用C++语言实现。。。
本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
输入(待排序元素个数、排序码上界(采用随机生成数组方式)),可选择输出(原始数组、排序后数组、原始数组有序度和无序度、排序过程中数据比较次数与数据移动次数、数组中出现频次最多的元素与排序后数组中前三大...
在计算机科学中,排序算法是解决数据组织问题的基础,而在众多排序算法中,快速排序与归并排序以其各自的优势,在不同的应用场景中备受青睐。本文将对这两种排序算法进行深入探讨,揭示它们的工作原理、性能特点及...
快速排序、归并排序和堆排序都是经典且高效的排序算法,它们各自具有独特的实现方式和性能特点。这篇文章将详细探讨这三个排序算法,并对比它们的时间复杂度。 首先,我们来看快速排序。快速排序由C.A.R. Hoare在...
以下是关于"插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序"这十大经典排序算法的详细解释: 1. 插入排序:插入排序是一种简单的排序算法,它通过构建有序...
**希尔排序、快速排序与归并排序:NlogN经典排序算法详解** 排序算法是计算机科学中的基础且重要的一部分,尤其是在处理大量数据时,高效排序能够显著提升程序性能。本资料包聚焦于三类时间复杂度为O(nlogn)的经典...
根据给定的文件信息,我们将深入探讨两种经典的排序算法——快速排序和归并排序,并结合Java语言实现进行详细解析。 ### 快速排序算法 快速排序是一种高效的排序算法,采用分而治之的策略,其核心思想是选择一个...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
计算机算法课程的作业,用c++实现了归并排序和快速排序,并比较了两种算法的速度。测试数据为随机生成,可设置为10万、100万、1000万大小的数组。在代码中提供了详细的注释,在容易出错的地方进行了解释。下面是得到...
本文将深入探讨三种常见的高效排序算法:堆排序、快速排序和归并排序。它们都是基于不同的原理和策略,具有各自的优势和适用场景。 首先,堆排序是一种基于比较的排序算法,利用了二叉堆的数据结构。二叉堆是一个...
快速排序和归并排序是两种常用的排序算法,它们在计算机科学和编程领域有着广泛的应用,尤其是在数据处理和分析中。MATLAB作为一种强大的数值计算和数据分析工具,提供了丰富的函数和工具来实现这些算法。 快速排序...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...