成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java快速排序最優(yōu)代碼 java快速排序最優(yōu)代碼怎么用

急啊!求一段關于java 的快速排序的代碼

public class quickSort {

10年積累的網(wǎng)站建設、做網(wǎng)站經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先建設網(wǎng)站后付款的網(wǎng)站建設流程,更有敖漢免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

public quickSort() {

}

public void printA(int[] a) {

for (int i = 0; i a.length; i++) {

System.out.print(a[i] + " ");

}

System.out.println();

}

public void chooseSort(int[] a, int left, int right) {

int smallest;

int flagIndex = 0;

int forSwap;

boolean flag;

for (int i = left; i right; i++) {

smallest = a[i];

// System.out.println("first" + smallest);

flagIndex = i;

flag = false;

for (int j = i + 1; j = right; j++) {

if (a[j] smallest) {

smallest = a[j];

flagIndex = j;

flag = true;

// System.out.println(smallest + " " + flagIndex);

}

}

if(flag){

forSwap = a[i];

a[i] = smallest;

a[flagIndex] = forSwap;

// System.out.println(smallest);

// printA(a);

// printA(a);

}

}

}

public void quickSort(int[] a, int left, int right) {

int index;

// printA(a);

if (left right right - left 10) { //可以優(yōu)化如果數(shù)組元素小于10就用選擇排序

index = partition(a, left, right);

quickSort(a, left, index - 1);

quickSort(a, index + 1, right);

} else {

chooseSort(a, left, right);

}

}

public int partition(int[] a, int left, int right) {

int result = getMiddle(a[left], a[right], a[(int) ((left + right) / 2)]);

int flagIndex;

if (result == 1) {

flagIndex = left;

} else if (result == 2) {

flagIndex = right;

} else {

flagIndex = (int) ((left + right) / 2);

}

int lowIndex, highIndex;

lowIndex = left - 1;

highIndex = right + 1;

int compareValue = a[flagIndex];

int k = a[left];

a[left] = compareValue;

a[flagIndex] = k;

// System.out.println(compareValue);

while (lowIndex + 1 != highIndex) {

if (a[lowIndex + 1] = compareValue) {

lowIndex++;

} else if (a[highIndex - 1] = compareValue) {

highIndex--;

} else {

k = a[lowIndex + 1];

a[++lowIndex] = a[highIndex - 1];

a[--highIndex] = k;

}

}

// printA(a);

a[left] = a[lowIndex];

a[lowIndex] = compareValue;

return lowIndex;

}

public int getMiddle(int a, int b, int c) {

if (a = b) {

if (b = c) {

return 2;

} else {

if (a = c) {

return 3;

} else {

return 1;

}

}

} else {

if (c = b) {

return 2;

} else {

if (a = c) {

return 1;

} else {

return 3;

}

}

}

// return 0;

}

}

如何用JAVA實現(xiàn)快速排序算法?

本人特地給你編的代碼\x0d\x0a親測\x0d\x0a\x0d\x0apublicclassQuickSort{\x0d\x0a\x0d\x0apublicstaticintPartition(inta[],intp,intr){\x0d\x0aintx=a[r-1];\x0d\x0ainti=p-1;\x0d\x0ainttemp;\x0d\x0afor(intj=p;jif(a[j-1]//swap(a[j-1],a[i-1]);\x0d\x0ai++;\x0d\x0atemp=a[j-1];\x0d\x0aa[j-1]=a[i-1];\x0d\x0aa[i-1]=temp;\x0d\x0a\x0d\x0a}\x0d\x0a}\x0d\x0a//swap(a[r-1,a[i+1-1]);\x0d\x0atemp=a[r-1];\x0d\x0aa[r-1]=a[i+1-1];\x0d\x0aa[i+1-1]=temp;\x0d\x0a\x0d\x0areturni+1;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublicstaticvoidQuickSort(inta[],intp,intr){\x0d\x0a\x0d\x0aif(p

求java快速排序的正確代碼

一趟快速怕序的具體做法是:附設兩個指針low和high,他們的初值分別為low和high,設樞軸記錄的關鍵字為privotkey,則首先從high所指位置向前搜索找到第一個關鍵字小于pivotkey的記錄和樞軸記錄互相交換,然后從low所指向的位置起向后搜索,找到第一個關鍵字大于privotkey的記錄和樞軸記錄互相交換,重復這兩步直至low==high位置.

import java.util.concurrent.Executor;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class 快速排序_1 {

public static void main(String[] args) throws InterruptedException {

int test[] = {15,23,56,7,13,52,20,7};

new 快速排序_1().qSort(test, 0, test.length-1);

for(int k:test) System.out.println(k);

}

public void qSort(int []array,int low,int high){

if(low

int privot=partition(array,low,high);

qSort(array,low,privot-1);

qSort(array,privot+1,high);

}

}

public int partition(int [] array,int low,int high){

/**

* 選擇 low位置 作為曲軸(支點)

*/

int pivot=array[low];

int temp=0;

/**

* 如果 low

*/

while(low

/**

* 先從 high端 開始判斷

*/

while(low=pivot) high--;

/**

* 進行 置換操作

*/

if(low

array[low]=array[high];

low++;

}

/**

* 從 low 端判斷

*/

while(low

/**

* 進行 置換操作

*/

if(low

array[high]=array[low];

high--;

}

}

array[low]=pivot;

return low;

}

}

請問一下java快速排序源代碼

快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**

* @author treeroot

* @since 2006-2-2

* @version 1.0

*/

public class QuickSort implements SortUtil.Sort{

/* (non-Javadoc)

* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/

public void sort(int[] data) {

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

}

private void quickSort(int[] data,int i,int j){

int pivotIndex=(i+j)/2;

//swap

SortUtil.swap(data,pivotIndex,j);

int k=partition(data,i-1,j,data[j]);

SortUtil.swap(data,k,j);

if((k-i)1) quickSort(data,i,k-1);

if((j-k)1) quickSort(data,k+1,j);

}

/**

* @param data

* @param i

* @param j

* @return

*/

private int partition(int[] data, int l, int r,int pivot) {

do{

while(data[++l]pivot);

while((r!=0)data[--r]pivot);

SortUtil.swap(data,l,r);

}

while(lr);

SortUtil.swap(data,l,r);

return l;

}

}

改進后的快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**

* @author treeroot

* @since 2006-2-2

* @version 1.0

*/

public class ImprovedQuickSort implements SortUtil.Sort {

private static int MAX_STACK_SIZE=4096;

private static int THRESHOLD=10;

/* (non-Javadoc)

* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/

public void sort(int[] data) {

int[] stack=new int[MAX_STACK_SIZE];

int top=-1;

int pivot;

int pivotIndex,l,r;

stack[++top]=0;

stack[++top]=data.length-1;

while(top0){

int j=stack[top--];

int i=stack[top--];

pivotIndex=(i+j)/2;

pivot=data[pivotIndex];

SortUtil.swap(data,pivotIndex,j);

//partition

l=i-1;

r=j;

do{

while(data[++l]pivot);

while((r!=0)(data[--r]pivot));

SortUtil.swap(data,l,r);

}

while(lr);

SortUtil.swap(data,l,r);

SortUtil.swap(data,l,j);

if((l-i)THRESHOLD){

stack[++top]=i;

stack[++top]=l-1;

}

if((j-l)THRESHOLD){

stack[++top]=l+1;

stack[++top]=j;

}

}

//new InsertSort().sort(data);

insertSort(data);

}

/**

* @param data

*/

private void insertSort(int[] data) {

int temp;

for(int i=1;idata.length;i++){

for(int j=i;(j0)(data[j]data[j-1]);j--){

SortUtil.swap(data,j,j-1);

}

}

}

}

java快速排序簡單代碼

.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《數(shù)據(jù)結(jié)構與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是快速排序算法:

快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個項目要 Ο(nlogn) 次比較。在最壞狀況下則需要 Ο(n2) 次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他 Ο(nlogn) 算法更快,因為它的內(nèi)部循環(huán)(inner loop)可以在大部分的架構上很有效率地被實現(xiàn)出來。

快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。

快速排序又是一種分而治之思想在排序算法上的典型應用。本質(zhì)上來看,快速排序應該算是在冒泡排序基礎上的遞歸分治法。

快速排序的名字起的是簡單粗暴,因為一聽到這個名字你就知道它存在的意義,就是快,而且效率高!它是處理大數(shù)據(jù)最快的排序算法之一了。雖然 Worst Case 的時間復雜度達到了 O(n?),但是人家就是優(yōu)秀,在大多數(shù)情況下都比平均時間復雜度為 O(n logn) 的排序算法表現(xiàn)要更好,可是這是為什么呢,我也不知道。好在我的強迫癥又犯了,查了 N 多資料終于在《算法藝術與信息學競賽》上找到了滿意的答案:

快速排序的最壞運行情況是 O(n?),比如說順序數(shù)列的快排。但它的平攤期望時間是 O(nlogn),且 O(nlogn) 記號中隱含的常數(shù)因子很小,比復雜度穩(wěn)定等于 O(nlogn) 的歸并排序要小很多。所以,對絕大多數(shù)順序性較弱的隨機數(shù)列而言,快速排序總是優(yōu)于歸并排序。

1. 算法步驟

從數(shù)列中挑出一個元素,稱為 "基準"(pivot);

重新排序數(shù)列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作;

遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序;

2. 動圖演示

代碼實現(xiàn) JavaScript 實例 function quickSort ( arr , left , right ) {

var len = arr. length ,

? ? partitionIndex ,

? ? left = typeof left != 'number' ? 0 : left ,

? ? right = typeof right != 'number' ? len - 1 : right ;

if ( left

java編程實現(xiàn)隨機數(shù)組的快速排序

java編程實現(xiàn)隨機數(shù)組的快速排序步驟如下:

1、打開Eclipse,新建一個Java工程,在此工程里新建一個Java類;

2、在新建的類中聲明一個產(chǎn)生隨機數(shù)的Random變量,再聲明一個10個長度的int型數(shù)組;

3、將產(chǎn)生的隨機數(shù)逐個放入到數(shù)組中;

4、利用排序算法對隨機數(shù)組進行排序。

具體代碼如下:

import?java.util.Random;

public?class?Demo?{

public?static?void?main(String[]?args)?{

int?count?=?0;

Random?random?=?new?Random();

int?a[]?=?new?int[10];

while(count??10){

a[count]?=?random.nextInt(1000);//產(chǎn)生0-999的隨機數(shù)

count++;

}

for?(int?i?=?0;?i??a.length?-?1;?i++)?{

int?min?=?i;

for?(int?j?=?i?+?1;?j??a.length;?j++)?{

if?(a[j]??a[min])?{

min?=?j;

}

}

if?(min?!=?i)?{

int?b?=?a[min];

a[min]?=?a[i];

a[i]?=?b;

}

}

for?(int?c?=?0;?c??a.length;?c++)?{

System.out.print(a[c]?+?"?");

}

}

}

標題名稱:java快速排序最優(yōu)代碼 java快速排序最優(yōu)代碼怎么用
URL鏈接:http://jinyejixie.com/article30/dodohpo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、、標簽優(yōu)化、企業(yè)建站做網(wǎng)站、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
芜湖市| 无极县| 三都| 白河县| 平乡县| 许昌市| 大关县| 浙江省| 尚义县| 明水县| 平阴县| 明光市| 介休市| 荃湾区| 新疆| 象山县| 平武县| 安义县| 彭水| 信阳市| 贡觉县| 奉新县| 沧州市| 怀远县| 吉首市| 万山特区| 井冈山市| 桑日县| 临安市| 黄冈市| 库尔勒市| 普陀区| 内乡县| 通道| 韶山市| 祁东县| 剑河县| 遂平县| 乐安县| 灵石县| 汉阴县|