快速排序的递归和非递归
快速排序,顾名思义,是一种速度快,效率高的排序算法。
- 快排原理:
1定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标
2从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;
3从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;
4交换Ai 和Aj
--------------------- 本文来自 Yexiaofen 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Yexiaofen/article/details/78018204?utm_source=copy
递归:
public static void sort(int a[], int low, int hight) {
int i, j, index;
if (low > hight) {
return;
}
i = low;
j = hight;
index = a[i]; // 用子表的第一个记录做基准
while (i < j) { // 从表的两端交替向中间扫描
while (i < j && a[j] >= index)
j--;
if (i < j)
a[i++] = a[j];// 用比基准小的记录替换低位记录
while (i < j && a[i] < index)
i++;
if (i < j) // 用比基准大的记录替换高位记录
a[j--] = a[i];
}
a[i] = index;// 将基准数值替换回 a[i]
sort(a, low, i - 1); // 对低子表进行递归排序
sort(a, i + 1, hight); // 对高子表进行递归排序
}
---------------------
作者:jianyuerensheng
来源:CSDN
原文:https://blog.csdn.net/jianyuerensheng/article/details/51258374
版权声明:本文为博主原创文章,转载请附上博文链接!
非递归:
1 package 剑指offer.快速排序; 2 3 import java.util.Stack; 4 5 /** 6 * Created by nick on 2018/10/6. 7 * 非递归 8 */ 9 public class Solution { 10 public static void main(String[] args) { 11 int[] m={5,3,6,3,2,9}; 12 new Solution1().QiockSortNor(m,0,5); 13 for(int t:m) 14 System.out.println(t); 15 } 16 //一趟快速排序 17 int sort(int m[],int i,int j){ 18 int x=m[i]; 19 while (i<j) {//一次不行,进行多次 20 while (i < j && m[j] >= x)//从右向左,找比x小的 21 j--; 22 if (i < j) { 23 m[i] = m[j]; 24 i++; 25 } 26 while (i < j && m[i] <= x)//从左向右,找比x大的 27 i++; 28 if (i < j) { 29 m[j] = m[i]; 30 j--; 31 } 32 m[i] = x; 33 } 34 return i; 35 } 36 void QiockSortNor(int num[],int low,int high) 37 { 38 Stack<Integer> st=new Stack<Integer>(); 39 if(low<high) 40 { 41 int mid =sort(num,low,high); 42 if(low<mid-1){//找到中间的数之后,左右边界入栈 43 st.push(low); 44 st.push(mid-1); 45 } 46 if(mid+1<high){ 47 st.push(mid+1); 48 st.push(high); 49 } 50 while(!st.empty()){//将左右边界出栈之后进行下一次排序操作,直到所有的元素全部出栈,没有还在栈里面的元素 51 int q=st.pop();//右边界 52 int p=st.pop();//左边界 53 mid=sort(num,p,q); 54 if(p<mid-1) 55 { 56 st.push(p); 57 st.push(mid-1); 58 } 59 if(mid+1<q) 60 { 61 st.push(mid+1); 62 st.push(q); 63 } 64 } 65 } 66 } 67 68 }