@快速排序C++代码实现(递归将数组分为比基准项小的集合和比基准项大的集合)
快速排序是首先选择数组的第一个元素为基准项,然后从数组的左边遍历到第一个比基准项大的元素和从数组的右边遍历到第一个比基准项小的元素,再将这两个元素互换位置,使得比基准项小的元素放在左边,比基准项大的元素放在右边。然后迭代遍历,直到找到的比基准项大的元素的下标比比基准项小的元素的下标大,然后互换基准项元素和最后一次找到的比基准项小的元素。
然后将基准项左边比它小的元素组成的数组如此一直递归下去,直到左边的数组已经排好序,同理将基准项右边比它小的元素组成的数组也一直递归下去,直到整个数组都排好序。
由于一直为找工作的笔试做准备,所以其中的输入是按照行的输入自动读取的,输入完一行数据通过Ctrl+D来结束输入,程序结束就会显示结果。注意:输入的数据以空格隔开为一行数据。
方法一:python标准方法(不需要额外的列表空间)
# 快速排序
import sys
def Quick_sort(lists, left, right):
if left < right:
i = left
j = right
pivot = lists[left]
while i < j:
while lists[i] <= pivot:
i += 1
while lists[j] > pivot:
j -= 1
if(i < j):
lists[i], lists[j] = lists[j], lists[i]
lists[left], lists[j] = lists[j], lists[left]
Quick_sort(lists, left, j-1)
Quick_sort(lists, j+1, right)
return lists
if __name__ == '__main__':
lines = sys.stdin.readlines()
lists = lines[0].strip().split()
print("排序前序列为:", )
for i in lists:
print(i, end=" ")
print("\n排序后结果为:")
for i in (Quick_sort(lists, 0, len(lists)-1)):
print(i, end=" ")
方法二:C++标准方法(不需要额外的列表空间)
#include <iostream>
using namespace std;
//快速排序算法
void QuickSort(int *a,const int left, const int right);
int main()
{
//声明一个数组,并遍历打印出所有的值
int k[] = {8,6,4,9,2,7,3,1,5,0};
for (int i=0;i<10;i++)
{
cout << k[i] << " ";
}
cout << endl;
//将上面的数组进行快速排序,并重新打印出数组中排好序的值
QuickSort(k,0,9);
for (int i=0;i<10;i++)
{
cout << k[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
void QuickSort(int *a,const int left, const int right)
{
//首先必须保证要遍历的数组的开始下标比结束下标小
if (left < right)
{
int i = left;
int j = right+1;
int pivot = a[left]; //取基准项为数组的开始下标的元素
do
{ do
{
i++;
} while (a[i] < pivot);
do
{
j--;
} while (a[j]>pivot);
//找到比基准项大的元素的下标i和比基准项小的元素的下标j,然后互换这两个元素
if (i<j)
{
swap(a[i], a[j]);
}
} while (i<j);
//由于退出while循环的时候是i>=j,所以将找到的j下标的元素和基准项元素进行互换
swap(a[left],a[j]);
//依次递归实现比基准项小的左边数组所有元素的排序和右边比基准项大的所有元素的数组的排序
QuickSort(a, left, j-1);
QuickSort(a, j+1,right);
}
}