快速排序C++代码实现(递归将数组分为比基准项小的集合和比基准项大的集合)

本文深入讲解了快速排序算法的原理及其实现,包括C++和Python两种语言的代码示例。快速排序是一种高效的排序算法,通过递归地将数组分为比基准项小和比基准项大的两个子数组进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@快速排序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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值