快速排序及c++实现
2017-09-02 09:57
190 查看
一个暑假的闲暇,玩的是舒服了,可是脑子里的各种算法却忘了,果然编程是个靠保持状态的活,昨天复习了便快排,拿出来写个博客加深个印象。
简介:快排是基于分治模式的,它的平均时间复杂度为O(nlgn),最坏复杂度是O(n*n)。
思想:快排的其基本思想是,数组中先随机找个主元(pivot element),而将比主元小的数全放在主元左边,比主元大的数放主元右边,然后再将这个数组根据主元拆分成左右两个数组,再根据上步骤进行排序拆分,直到所有拆分出的数组只有一个元素,即拆无可拆,也就是排序好了。
算法导论给出的伪代码是:
其中伪代码中的“=”其实是左箭头,因为打着麻烦就换成”=”。
函数QUICKSORT是递归式,PARTITION 是具体的排序过程。
这里就直接讲解PARTITION排序过程,其中主元它用的是数组最后一位,然后设置一个下标i=p-1即数组头的前一位,然后再遍历数组A[i],当遇到比主元小的,就让i右移并让i的元素与对比出的比主元小的元素置换,这样遍历完整个数组后,就是把所有比主元小的元素全部移到了i的后边,而比主元大的就在i的右边。
根据这个原理再实现到c++上:
a,i+1,e);
}
}
简介:快排是基于分治模式的,它的平均时间复杂度为O(nlgn),最坏复杂度是O(n*n)。
思想:快排的其基本思想是,数组中先随机找个主元(pivot element),而将比主元小的数全放在主元左边,比主元大的数放主元右边,然后再将这个数组根据主元拆分成左右两个数组,再根据上步骤进行排序拆分,直到所有拆分出的数组只有一个元素,即拆无可拆,也就是排序好了。
算法导论给出的伪代码是:
QUICKSORT(A,p,r) if p<r then q = PARTITION(A,p,r) QUICKSORT(A,p,q-1) QUICKSORT(A,q+1,r) PARTITION(A,p,r) x=A[r] i=p-1 for j = p to r-1 do if A[j]<=x then i=i+1 exchange A[i]=A[j] exchange A[i+1] A[r] return i+1
其中伪代码中的“=”其实是左箭头,因为打着麻烦就换成”=”。
函数QUICKSORT是递归式,PARTITION 是具体的排序过程。
这里就直接讲解PARTITION排序过程,其中主元它用的是数组最后一位,然后设置一个下标i=p-1即数组头的前一位,然后再遍历数组A[i],当遇到比主元小的,就让i右移并让i的元素与对比出的比主元小的元素置换,这样遍历完整个数组后,就是把所有比主元小的元素全部移到了i的后边,而比主元大的就在i的右边。
根据这个原理再实现到c++上:
static void QuickSort(int a[],int s,int e){ //s为start,数组头,e为end,数组尾 if(s<e){ int flag = a[e];//主元为数组最后一位 int i = s-1; int j = s; while(j<=e){ if(a[j]<=flag){ i++; //置换 int temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } j++; } QuickSort(a,s,i-1); QuickSort
a,i+1,e);
}
}
相关文章推荐
- C/C++面试题:编程实现快速排序
- C++实现快速排序
- C++实现快速排序(源代码)
- 快速排序(快排)算法的C++两种实现
- C++实现快速排序(源代码)
- 快速排序(C++实现)
- c++实现快速排序
- 【算法导论】c++实现的随机化的快速排序
- C++ 实现堆排序 归并排序 快速排序
- 快速排序及其改进算法C++实现
- C++ 快速排序的实现 左右同时开弓
- C++代码实现快速排序
- C++ 快速排序实现
- c++实现快速排序(QuickSort)
- C++中调用库函数实现快速排序
- c++ 实现 归并排序和快速排序
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 归并排序、快速排序的原理以及C++实现
- 快速排序(C++实现)
- c++快速排序的实现