C语言
#include<stdlib.h>
#include<string.h>
#define N 10
void quickSort(int a[], int start, int end)
{
int base, middle;
int tempStart = start, //备份作用,保留头尾的数值。因为索引start和end会移动改变。用在递归调用的参数。
tempEnd = end;
//对于这种递归的函数,内部必须要有一个函数返回的条件
if (tempStart >= tempEnd)
{
return;
}
base = a[start]; //设置基准数
while (start < end)
{
while (start < end && a[end] > base)
{
end--;
}
/* if (start < end)
{
int t;
t = a[start];
a[start] = a[end];
a[end] = t;
start++;
}
*/
a[start] = a[end]
while (start < end && a[start] < base)
{
start++;
}
/* if (start < end)
{
int t;
t = a[start];
a[start] = a[end];
a[end] = t;
end--;
}
*/
a[end] = a[start]
}
a[start] = base; //将开头的基准数赋值给此时start指向的位置,即成为分割点,左边为<该数的值,右边为》该数的值
middle = start; //将此时的start索引变成切分两部分的中间索引
// 递归调用
quickSort(a, tempStart, middle - 1);
quickSort(a, middle + 1, tempEnd);
}
int main()
{
int a[N] = { 12,54,84,1,3,6,0,98,120,10 };
//调用函数,传入参数:数组名,头索引,尾索引
quickSort(a, 0, N - 1);
for (int i = 0; i<N; i++)
printf("%5d", a[i]);
system("pause");
}
python
递归
def quick_sort(array):
if len(array) < 2:
return array
mid = array[0]
# leftarray = []
# rightarray = []
# for x in array[1:]:
# if x >= mid:
# rightarray.append(x)
# else:
# leftarray.append(x)
# 以上注释部分也可用以下替换
leftarray = [x for x in array[1:] if x <= mid]
rightarray = [x for x in array[1:] if x > mid]
return quick_sort(leftarray) + [mid] + quick_sort(rightarray)
array = [7, 5, 96, 2]
print(quick_sort(array))
非递归(C语言风格)
按照c语言修改即可