#include <stdio.h>
#define NUM (int)(10)
/**
*******************************************************************************
*
* @brief exchange two numbers *tempPtr1 and *tempPtr2
* @param tempPtr1: Input; pointer points to the number needed to exchange
* @param tempPtr2: Input; pointer points to the number needed to exchange
*
*******************************************************************************/
void Swap(int *tempPtr1, int *tempPtr2)
{
int temp;
temp = *tempPtr1;
*tempPtr1 = *tempPtr2;
*tempPtr2 = temp;
}
/**
*******************************************************************************
*
* @brief partition the array into two part, the former is less than a
base number and the later is larger than a base number
* @param arrPtr: Input/Output; pointer points to a array
* @param begin: Input; the index of the array--begin
* @param end: Input; the index of the array--end
* @param return: Onput; the location where the base number is
*
*******************************************************************************/
int Partition(int *arrPtr, int begin, int end)
{
int temp;
int i;
int j;
temp = arrPtr[end];
i = begin - 1;
for(j = begin; j <= end - 1; j++)
{
if(arrPtr[j] <= temp)
{
i++;
Swap(&arrPtr[i], &arrPtr[j]);
}
}
Swap(&arrPtr[i + 1], &arrPtr[end]);
return i + 1;
}
/**
*******************************************************************************
*
* @brief QuickSort
* @param arrPtr: Input/Output; pointer points to a array
* @param begin: Input; the index of the array--begin
* @param end: Input; the index of the array--end
*
*******************************************************************************/
void QuickSort(int *arrPtr, int begin, int end)
{
int mid;
if(begin < end)
{
mid = Partition(arrPtr, begin, end);
QuickSort(arrPtr, begin, mid - 1);
QuickSort(arrPtr, mid + 1, end);
}
}
int main(void)
{
int a[NUM] = { 2,4,8,23,37,-23,1,2,10,6};
int k;
QuickSort(a, 0, NUM - 1);
for( k = 0; k <= NUM-1; k++)
{
printf("%d ",a[k]);
}
printf("\n");
return 0;
}
Quick Sort
最新推荐文章于 2024-05-13 15:54:23 发布