快速排序(基于分治思想)
程序员文章站
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 ;
}
上一篇: 娃她爹,你是嫌弃你闺女吗