zoukankan      html  css  js  c++  java
  • 算法——基础篇——高速排序

    高速排序是一个常常使用的算法,因为每次用的时候,都感觉没有理解清楚,特写一篇文章记录一下。

    算法介绍


    高速排序有点类似有冒泡排序,冒泡排序从相邻的两个元素比較。小的在左边,大的在右边。这个算法非常easy理解。而高速排序它相当于是在一头一尾两边分别排序比較,比較的对象是当前元素值,和一个选定的key值,主题的思想就是通过跟key值比較。把大于key的值放在右边。小于的放在左边这样就完毕了一次排序,接着在对key值左边的序列进行相同的操作,右边也是,最后便能将全部的元素给排好序,因为它每次排序。都会分成左右两部分,左边和右边的相对于key值来说是排好序的,接着仅仅须要对左右两边分别递归一次排序的过程就能够了,它的效率较冒泡排序还是要高非常多的,O(nlgn)...

    具体处理过程:(来自百度百科)

    设要排序的数组是A[0]……A[N-1],首先随意选取一个数据(通常选用数组的第一个数)作为重要数据。然后将全部比它小的数都放到它前面。全部比它大的数都放到它后面,这个过程称为一趟高速排序。值得注意的是。高速排序不是一种稳定的排序算法,也就是说,多个同样的值的相对位置或许会在算法结束时产生变动。


    一趟高速排序的算法是:
    1)设置两个变量i、j。排序開始的时候:i=0,j=N-1;
    2)以第一个数组元素作为重要数据。赋值给key,即key=A[0];
    3)从j開始向前搜索,即由后開始向前搜索(j--)。找到第一个小于key的值A[j],将A[j]赋给A[i]。
    4)从i開始向后搜索。即由前開始向后搜索(i++)。找到第一个大于key的A[i],将A[i]赋给A[j]。
    5)反复第3、4步,直到i=j; (3,4步中。没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。

    找到符合条件的值,进行交换的时候i。 j指针位置不变。另外。i==j这一过程一定正好是i+或j-完毕的时候。此时令循环结束)。


    代码:

    package hello.ant;
    
    public class AlogQuickSort {
    	public static void main(String[] args) {
    		int array[]={4,5,1,2,0,11,3,6};
    //		int array[]={4,5,1,2,0,6};
    		sort(array,0,array.length-1);
    		for(int i=0;i<array.length;i++){
    			System.out.print(array[i]+" ");
    		}
    	}
    	static void sort(int[] array, int low, int heigh) {
    		int i=low,j=heigh;
    		if(i>j){
    			return;
    		}
    		int key=array[i];
    		while(i<j){
    			while(i<j&&array[j]>=key){
    				j--;
    			}
    			array[i]=array[j];
    			while(i<j&&array[i]<=key){
    				i++;
    			}
    			array[j]=array[i];
    		}
    		array[i]=key;
    		sort(array, low, i-1);
    		sort(array, j+1, heigh);
    	}
    }
    


    结果:
    0 1 2 3 4 5 6 11 


  • 相关阅读:
    DuckHunter Attacks
    iOS10 UI教程视图的边界与视图的框架
    iOS10 UI教程视图的几何形状
    iOS10 UI教程禁用视图与用户的交互
    iOS10 UI教程基改变视图的外观与视图的可见性
    分享Kali Linux 2016.2第47周虚拟机
    iOS10 UI教程基础窗口的内容与设置起始窗口
    分享Kali Linux 2016.2第47周镜像
    Swift3.0语言教程字符串与URL的数据转换与自由转换
    人机接口设备攻击(HID Attack)
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6922504.html
Copyright © 2011-2022 走看看