假设你已经掌握快速排序原理了,那么我们来写代码。
1.C++模板
#include<iostream> using namespace std; void quickSort(int q[],int l,int r){ if(l >= r) return; int i = l-1,j = r+1,x = q[l+r>>1]; while(i<j){ do i++;while(q[i]<x); do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]); } quickSort(q,l,j); quickSort(q,j+1,r); } int main(){ int n = 8; int arr[8] = {8,3,1,1,9,6,7,2}; quickSort(arr,0,n-1); //调用函数 for(int i = 0;i<n;i++) printf("%d",arr[i]); //输出 }
2.Python版本
我看到很少有根据C++模板来写一份Python代码的,这里给的就是模拟了一下do...while...循环。
那么这个时候需要注意两点:
1.do...while...默认判断数组边界,Python代码中需要自己写一个边界判断函数
2.do...while...循环每次先运行一次,然后再判断条件。因此无论后边的条件真假与否,至少运行一次。
n = 8 #len(arr) arr = [8,3,1,1,9,6,7,2] cri = lambda x:False if x>=n or x<0 else True #边界判断 def quickSort(l:int,r:int): if l >= r:return #这里注意赋值i = l-1,j = r-1,对应着后面的无论真假条件都先运行一次的情况 i = l-1 j = r+1 mid = l+r>>1 x = arr[mid] while i<j: #注意判断边界要写在前面,否则会出现数组越界 #无论之后条件真假都要先运行一遍 i+=1 while cri(i) and arr[i]<x:i+=1 j-=1 while cri(j) and arr[j]>x:j-=1 if i<j:arr[i],arr[j] = arr[j],arr[i] quickSort(l,j) quickSort(j+1,r) quickSort(0,n-1) #调用函数,因为arr作为全局变量,因此不需要写进函数参数里 for i in range(n):print(arr[i],end = ' ') #输出arr数组(排好序后)