排序之快速排序
发布日期:2021-09-10 01:39:49 浏览次数:28 分类:技术文章

本文共 1775 字,大约阅读时间需要 5 分钟。

hot3.png

package com.xsz.demo;/**    * @author cwqi   * @date 2015-1-6   *///排序之快速排序,基本思路為分治+挖坑,方法有兩種:一是雙邊掃面;二是單邊掃描。public class QuickSort {	public static void main (String[] args){		int a[] ={2,3,30,1,4,56,2,7,3,8};		//int a[] ={4,5,6,2,7,3,8};		//int a[] ={1,5,4,3,8};		//int a[] ={1,1};		//int a[] ={1};		//int a[] ={};		//int a[] =null;		int start=0;		int end= a==null? -1:a.length -1;		//singleScan(a,start,end);		doubleScan(a,start,end);		print(a,end);	}	static void doubleScan(int[] a, int start, int end) {		 if(start < end){  		        int i = start, j = end, key = a[start];  		        while(i < j){  		        	//從後面往前找比key值小的元素		            while( i < j && a[j] >= key){  		                j--;  		            }  		            if(i < j){  		                a[i++] = a[j];  		            }  		            		            //從前面往後找比key值大的元素		            while(i < j && a[i] <= key){  		                i++;  		            }  		            if(i < j){  		                a[j--] = a[i];  		            }  		        }  		        		        a[i] = key;  //i為分區中心		        doubleScan(a, start, i-1);  		        doubleScan(a, i+1, end);  		    }   	}	static void singleScan(int[] a, int s, int e) {		int j = s+1;//遍歷下標		int p = s;//分區位置		if (s < e) {			int key =a[s];//key值			while (j<=e){				if(a[j] <= key){					p++ ;					//System.out.println("key->"+key);					int temp =a[p];					a[p] = a[j];					a[j]=temp;					//System.out.println("交換----->"+a[j]+" "+a[p]);					j++ ;				}else {					j++ ;				}			}						//將key值放在分區位置			int temp =a[s];			a[s] = a[p];			a[p]=temp;						singleScan(a, s, p-1);			singleScan(a, p+1, e);		}	}		static void print(int[]array ,int l){		for (int i = 0; i <= l; i++) {			System.out.print(array[i]+" ");		}	}}

转载于:https://my.oschina.net/u/1861837/blog/364484

转载地址:https://blog.csdn.net/weixin_34367845/article/details/92159273 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++数据结构--线性表 例子2
下一篇:python“ImportError: No module named _sqlite3

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月20日 20时06分27秒