java排序之快速排序

public class QuickSort

{

/**

* 分割函数(一趟快速排序函数) public static int partition(int[]n ,int left,int right)

* @param n

* @param left

* @param right

* @return

*/

public static int partition(int[] n, int left, int right)

{

int pivotkey = n[left];

// 枢轴选定后永远不变,最终在中间,前小后大

while (left < right)

{

while (left < right && n[right] >= pivotkey)

--right;

// 将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上

n[left] = n[right];

while (left < right && n[left] <= pivotkey)

++left;

// 将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上

n[right] = n[left];

}

// 当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上

n[left] = pivotkey;

System.out.println("枢轴key:" + left);

System.out.println("当前值:" + Arrays.toString(n));

return left;

}

/*

* 先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}

*/

public static void quickSort(int[] n, int left, int right)

{

int pivot;

if (left < right)

{

// pivot作为枢轴,较之小的元素在左,较之大的元素在右

pivot = partition(n, left, right);

// 对左右数组递归调用快速排序,直到顺序完全正确

quickSort(n, left, pivot - 1);

quickSort(n, pivot + 1, right);

}

}

public static void main(String[] args)

{

int[] array =

{ 9,8,7,6,5,4,3,2,1,0};

quickSort(array, 0, array.length - 1);

for (int i = 0; i < array.length; i++)

{

System.out.println(array[i]);

}

}

}

时间: 2024-10-10 14:11:08

java排序之快速排序的相关文章

java排序-交换排序-快速排序

优化前(传统): /** * 快速排序 */ @Test public void kuaiSuTest(){ /** * 1.选择一个基点 * 2.从两边开始向基点遍历,与基点比较,大小位置不对的就互换位置 * 3.遍历结束排序完成 */ sort(data,0,data.length-1); System.out.println(Arrays.toString(data)); } public static void sort(int[] data,int low,int height){ i

Java 排序算法 快速排序

import java.util.ArrayList; import java.util.Random; /* *返回一个数组,下标0是该元素的下标,下标1是该元素的值 */ public class minNumber { //每次返回接受数组中最小的数字,以数组的形式返回,0是最小数,1是它的下标 public static ArrayList<Integer> findMinNumber(ArrayList<Integer> list){ ArrayList<Integ

Java排序算法——快速排序

import java.util.Arrays; //================================================= // File Name : Arrays_Quick //------------------------------------------------------------------------------ // Author : Common //类名:Arrays_Quick //属性: //方法: class Arrays_Qu

排序算法----快速排序java

快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class test02{ public static void main(String[] args) { int n = 1; while (n != 0){ Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int s[] = ne

几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)

以下为集中排序的java代码实现(部分是在引用别人代码): 插入排序(InsertSort): //代码原理 public static void iSort(int[] a){ for(int i = 1;i < a.length; i++){ if(a[i] < a[i-1]){ int temp = a[i]; while(temp < a[i-1]){ a[i] = a[i-1]; if(i-1 > 0){ i--; }else{ break; } } a[i-1] = t

Java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序

冒泡排序: int[] hehe={4,7,2,5,6,9,0}; for(int i=0;i<hehe.length;i++){ for(int j=i+1;j<hehe.length;j++){ if(hehe[i]>hehe[j]){ int temp=hehe[i]; hehe[i]=hehe[j]; hehe[j]=temp; } } } 插入排序 int[] a={13,7,8,9,10,1,2,32}; int i,j,t,h; for (i=1;i<a.length

数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法

快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关. 升序排序: /** * 快速排序 * 升序排序 */ @Override public <T extends Comparable<? super T>> void sortByAsc(T[] data) { if(data == null || data.length <= 1){ return; } partitionSortByAsc(data, 0, data.length -

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

java排序之插入排序(直接插入排序和希尔排序)

上面一片博文探讨了关于的java选择排序(冒泡排序和快速排序)本章将继续探讨java排序之插入排序,插入排序分为直接插入排序和希尔排序两种. 1.直接插入排序思想:在需要排序的一组数据中假设前该数组的前n-1(n >= 2)个数是已经排好序的,现在要把第n个数插入到前面的n-1个数中,使得这n个数也是排好顺序的.如此反复进行,知道n等于需要排序的数组的长度时.就实现了该数组的直接插入排序. 代码如下: /** * * @param a 需要排序的数组 */ public static void