数据结构----快速排序
2016-05-24 20:54
267 查看
1.基本思想:
选择一个基准元素,通常选择第一个元素和最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于登陆基准元素,此时基准元素在其排好序之后的正确位置,然后再用同样的方法递归的排序划分的两部分。2.实例:
3.代码实现:
package com.sfd.quicksort; public class QuickSort { public static void main(String[] args) { int[] a = {57,68,59,52,72,28,96,33,24,19}; quickSort(a, 0, a.length-1); for(int i:a){ System.out.println(i); } } /** * 通过一次扫描将数组分成了两部分(分区),分别对这两部分进行partition处理; * 直到无法在进行分割位置,就是一个分区中只有一个数据即left>=right时 * @param a * @param left * @param right */ public static void quickSort(int[] a,int left,int right){ int pt; if(left<right){ pt = patition(a, left, right); quickSort(a,left, pt); quickSort(a, pt+1, right); } } /** * 将数组中left到right中的数进行分区,首先设定一个标准值:pivot * 再进行双向扫描:大于基准值的pivot的放在右侧,小于pivot的放在右侧; * 最后当left>=right时,停止扫描; * * @param a * @param left * @param right * @return */ public static int patition(int[] a,int left,int right){ int pivot = a[left]; while(left<right){ while(left<right&&a[right]>pivot){ right--; } if(left<right){ a[left++]=a[right]; } while(left<right&&a[left]<pivot){ left++; } if(left<right){ a[right--]=a[left]; } } a[left]=pivot; return left; } }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)