快速排序法-创新互联

1.快速排序原理

金凤网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

快速排序是在冒泡排序上进行的改进,思路如下:

在待排序中的元素随意选一个元素作为基准,一般都是以第一个元素为基准元素。

将元素进行分区,比基准元素元素大的放在其右边,比其小的放在基准元素的左边。

对各个分区重复上述的步骤直到所有元素为有序的。

2.图解如下:

(1)把第一个元素作为基准元素,用于比较进行分区,比基准元素元素大的放在其右边,比基准元素小的放在其左边,设置low索引,用来搜索比基准元素小的,设置high索引,用来搜索比基准元素大的元素。

(2)从high索引从右往左依次扫描,5和基准元素6进行比较,5<6, 则将5放在low索引处,之后将low索引右移,操作后数据如下:

(3)从low索引从左往右扫描,4和基准元素6进行比较,4<6,low索引继续右移动,操作后如下:

(4)继续从low从左往右扫描,2和基准元素进行比较,2<6,low索引继续向右移动,操作后如下图: 

(5)继续从low索引处从左往右扫描,9和基准元素进行比较,9>6, 这时将9赋值给high索引处,之后high索引进行向左移动一个元素,操作后如下图:

(6)从high索引处从右往左扫描,8和基准元素进行比较,8>6,此时high继续左移一个元素,这是low索引和high索引指向同一个元素,将基准元素6赋值到low索引处,操作后如下图:

此时low索引和high索引相同,第一轮排序结束,你会发现,比基准元素小的都在其左边,比基准元素大的都在其右边。之后对左右俩个区域重复上述操作直到所有元素为有序。

3.快速排序的实现

C语言实现代码如下:

void quickSort(int arr[], int low, int high)
{
	int first = low;
	int last  = high;

	int key = arr[first];//设置第1个数为 key,备份

	if(low >= high)
		return;
	//一轮的调整(比 key 大的放在右边, 比 key 小的放在左边)
	while(first< last)
	{
		//从右往左,找到比key 小的数放到 first 位置,找到比 key 大的数,继续往左移动
		while(first< last && arr[last] >key)
		{
			last--;
		}
		//将左边比基准值小的赋值到 last 索引位置
		arr[first] = arr[last];
		
		//从左往右,找到比 key 大的数放到 last 位置
		while(first< last && arr[first]< key)
		{
			first++;

		}
		//将右边比基准值大的赋值到 first 索引位置
		arr[last] = arr[first];

	}

	arr[first] = key;//一轮结束后

	quickSort(arr,low,first - 1);//对前面一半进行排序 

	quickSort(arr,first + 1,high);//对后面一半进行排序
}

  

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:快速排序法-创新互联
网页路径:http://myzitong.com/article/decoes.html