欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快速排序(基于分治思想)

程序员文章站 2022-03-24 15:45:14
...

众所周知,排序算法有很多种,初学者会学习冒泡排序,选择排序,插入排序,归并排序,快速排序等,这里就为大家介绍一下快速排序的基本思想。
首先呢,设置一个基准值key,一般都是数组中的第一个元素,然后设置两个指针i和j,分别指向第一个元素和最后一个元素,之后从最后一个元素开始,如果比基准元素大,则–j,若小于基准元素,则将交换arr[i] 与 arr[j],交换之后,停止–j,然后在++i,判断,若小于基准元素,则++i, 否则交换arr[i] 与 arr[j] ,直到一趟排序结束,基准元素左边的都小于等于基准元素,基准元素右边的都大于等于基准元素,然后继续将分割的两部分利用这种思想进行解决。
以下为快速排序的c++代码:

#include <iostream>
#define MAX_NUM 100
using namespace std ;
int arr[MAX_NUM] ;
void Swap( int & a , int & b )
{
	int t = a ;
	a = b ;
	b = t ;
}
void Quick_Sort( int arr[] , int f , int t )
{
	if( f >= t )
	return ;
	int i = f ;
	int j = t ;
	int key = arr[i] ;
	while( i < j )
	{
	while( i <= j && arr[j] > key )
	--j ;
	Swap( arr[i] , arr[j] ) ;
	while( i <= j && arr[i] < key )	
	++i ;
	Swap( arr[i] , arr[j] ) ;
	}
	Quick_Sort( arr , f , i-1 ) ;
	Quick_Sort( arr , i+1 , t ) ;
}
void Print( int arr[] , int f , int t )
{
	for( ; f < t ; ++f )
	cout << arr[f] << ' ' ;
}
int main()
{
	int n , a = 0 ;
	cin >> n ;
	for( int i = 0 ; i < n ; ++i )
	cin >> arr[i] ;
	Quick_Sort( arr , a , n - 1 ) ;
	Print( arr , a , n ) ;
	 
	return 0 ;
}
相关标签: 排序 算法