#include <iostream>
using namespace std;
//交换数据
template <typename T>
void swapValue( T & a , T & b)
{
T temp = a;
a = b;
b = temp;
}
//快速排序,只执行一趟 (方法一)
template <typename T>
int partition( T arr[] ,int start ,int end)
{
T temp = arr[start];
while ( start < end )
{
while ( start < end && arr[end] >= temp)
{
end--;
}
arr[start] = arr[end];
while( start < end && arr[start] <= temp )
{
start++;
}
arr[end] = arr[start];
}
arr[start] = temp; // 这是注意的地方
return start;
}
//快速排序 快速排序只执行一趟 (方法二)
template <typename T>
int partition ( T arr[] , int start, int end )
{
T temp = arr[end];
int i = start-1 ;
for( int j= start; j < end; j++ )
{
if ( arr[j] < temp)
{
i++;
swapValue(arr[i] , arr[j]);
}
}
swapValue(arr[i+1] , arr[end]);
return i+1;
}
//快速排序
template <typename T>
void quickSort(T arr[],int start, int end )
{
if ( start < end)
{
int mid = partition(arr, start ,end); //注意此处
quickSort(arr , start ,mid-1);
quickSort(arr, mid+1, end);
}
}
void main()
{
int arr[] = {1,-2,3,-4,5,-8, 20 ,4};
int len = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, len-1);
for (int i = 0 ; i<len ; i++)
{
cout << arr[i] <<" ";
}
cout <<endl;
}
快速排序
最新推荐文章于 2024-07-17 10:35:12 发布