[数据结构和算法]快速排序笔记
2014-05-24 13:15 hellenism 阅读(158) 评论(0) 编辑 收藏 举报特点:
1.是冒泡的改进
2.是一个递归的过程
3.不稳定
4.时间复杂度:O(nlogn)
设要排序的数组是A[0]...A[n-1],首先取数组的第一个数作为关键数据,
然后将所有比它小的数都放到它的前面,比他大的都放到他的后面,这个过程被称为一趟快速排序
算法步骤:
1.设置两个变量i,j,排序开始i = 0, j = N-1;
2.以第一个数组元素作为关键字,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 src; public class QSort { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 quicksort qs = new quicksort(); int data[] = {44,22,2,32,54,22,88,77,99,11}; qs.data = data; qs.sort(0, qs.data.length-1); qs.display(); } } class quicksort { public int data[]; private int partition(int sortArray[],int low,int hight) { int key = sortArray[low]; while(low<hight) { while(low<hight && sortArray[hight]>=key) hight--; sortArray[low] = sortArray[hight]; while(low<hight && sortArray[low]<=key) low++; sortArray[hight] = sortArray[low]; } sortArray[low] = key; return low; } public void sort(int low,int hight) { if(low<hight) { int result = partition(data,low,hight); sort(low,result-1); sort(result+1,hight); } } public void display() { for(int i=0;i<data.length;i++) { System.out.print(data[i]); System.out.print(" "); } } }
人生就是一局不能Again的DOTA