python实现:
#快速排序法
#交换a[i]和a[j]
def exchange(a,i,j):
p=a[i]
a[i]=a[j]
a[j]=p
"""分割数组a[],以(high是最后一个元素下标,
low是第一个下标一般为0)
x=a[high]为标尺,a[i+2,high]>=x,a[low,i]<=x
"""
def Partition(a,head,tail):
x=a[tail]
i=head-1
for j in range(head,tail):
if(a[j]<=x):
i=i+1
exchange(a,i,j)
exchange(a,i+1,tail)
return i+1
'''
递归快排
'''
def QuickSort(a,head,tail):
if (head<tail):
q=Partition(a,head,tail)
QuickSort(a,head,q-1)
QuickSort(a,q+1,tail)
"""
选择第k小的元素
"""
def Select(a,head,tail,k):
var=1
while(var==1):
q=Partition(a,head,tail)
if(k==q+1):
return a[q]
elif(k<q+1):
tail=q-1
else:
head=q+1
if __name__ == "__main__":
a=[66,22,55,11,33,11,22,44,556,7788,4356,332,1,4]
#print(Partition(a,0,13))
QuickSort(a,0,13)
print(a)
k=10
print("第%d小的元素是:"%(k))
print(Select(a,0,13,k))
C++实现:
#include <iostream>
using namespace std;
template <typename Type>
int Partition(Type a[],int m,int p) {
Type x = a[p];
int i = m - 1;
for (int j = m; j <= p - 1; j++) {
if (a[j] <= x) {
i = i + 1;
Interchange(a, i, j);
}
}
Interchange(a, i + 1, p);
return i + 1;
}
template <typename Type>
void Interchange(Type a[],int i,int j) {
Type p = a[i];
a[i] = a[j];
a[j] = p;
}
template <typename Type>
void QuickSort(Type a[],int m,int p) {
if (m < p) {
int q = Partition(a, m, p);
QuickSort(a, m, q - 1);
QuickSort(a, q + 1, p);
}
}
int main() {
int b = 0;
int a[10] = { 65,70,32,75,80,85,60,55,50,45 };
QuickSort(a, 0, 9);
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
cin >> b;
}