C/C++语言重温------排序之快速排序
#include<iostream>
using namespace std;
#define random(a,b) (rand()%(b-a)+a)
template <typename T, int N>
int getSize(T(&input)[N]) {
return sizeof(input) / sizeof(T);
}
int arr_length = 0;
void display_arr(int *arr)
{
for (int i = 0; i < arr_length; i++)
{
cout << "arr[" << i << "]:" << arr[i] << endl;
}
}
int getKeyIndex(int *arr, int start, int end)
{
swap( arr[ random(start, end) ], arr[end] );
int i, j;
for (i = start, j = start; j < end; j++)
{
if(arr[j] <= arr[end])
{
if (i != j)
{
swap(arr[i], arr[j]);
}
i++;
}
}
swap(arr[j], arr[i]);
return i;
}
void quick_sort(int *arr, int start, int end)
{
if (start >= end)
{
return;
}
int key = getKeyIndex(arr, start, end);
quick_sort(arr, start, key - 1);
quick_sort(arr, key + 1, end);
}
int main(int argc, char const *argv[])
{
int arr[] = { 5, 6, 1, 9, 2, 4, 3, 7, 10, 8 };
arr_length = getSize(arr);
display_arr(arr);
cout << endl;
quick_sort(arr, 0, arr_length - 1);
display_arr(arr);
return 0;
}