快速排序是由冒泡排序改进而来的,它的基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入最终位置后,整个数据区间被此记录分割成两个子区间。所有关键字比该记录关键字小的放置在前子区间中,所有比它大的放置在后子区间中,并把该记录排在这两个子区间的蹭,这个过程叫一趟快速排序。之后对两个子区间分别重复以上过程,直到每个子区间只有一个记录。
通常彩从两头向蹭扫描的办法,同时交换与基准记录逆序的记录。具体方法是:设两个指示器i和j,它们的初始值分别指向无序区中的第一个和最后一个记录。假设无序区中的记录为R[s..t],则i的初值为s,j的初值为t,首先将R[s]移至临时变量tmp中作为基准,令j自t起向左扫描直到R[i].key>tmp.key时,将R[i]移至j所指的位置上,依次重复直到i=j,此时所有R[k](k=s,s+1,...j-1)的关键字都小于tmp.key而所有R[k](k=j+1,j+2,...,t)的关键字必大于tmp.key,则可将tmp中的记录移至i所指位置R[i],它将无序区中的记录分割成R[s..j-1]和R[j+1..t],以便分别进行重复以上步骤进行排序。
快速排序算法的时间复杂度是O(nlog2^n),而且快速排序是不稳定的。