一、定义
快速排序是一种较为复杂的排序方式,其时间复杂度为nlog2n。
算法的思想:
首先我们是以数组开头元素为基准的我们先用一个变量来存放它,我们用两个指针来指向该数组
的头和尾,我们默认以升序排序。如果头指针的值大于等于基准数,不做任何变化,让指针指向
下一个元素,否则头指针元素和尾指针元素进行交换。如果尾指针元素小于基准元素则不做任何
改变让尾指针指向它的上一个元素,否则头指针元素和尾指针元素进行交换。这种操作持续到头
指针和尾指针指向同一个元素为止。当第一趟完成时基准元素左边都是比它小的右边都是比他大
的。然后将基准值左侧和右侧再做上述操作。
二、使用
void fast_sort(int *array,int low,int high)
{
if(low>=high)
{
return ;
}
int i = low;//头元素
int j = high;//尾元素
int pv = array[low];//头元素做基准
while (low < high)
{
while ((low<high)&&(array[high]>=pv))
{
high --;
}
array[low] = array[low]+array[high];//交换
array[high]=array[low]-array[high];
array[low] = array[low]-array[high];
while((low<high)&&(array[low]<=pv))
{
low ++;
}
array[low] = array[low]+array[high];//交换
array[high]=array[low]-array[high];
array[low] = array[low]-array[high];
}
array[low] = pv;//尾指针指向基准
fast_sort(array,i,low-1);//位于基准递归调用
fast_sort(array,low+1,j);//位于基准右侧调用
}
void print(int *p)
{
int i;
for (i=0;i<10;i++)
{
printf("%d\n",p[i]);
}
}
int main()
{
int array[10]={49,38,65,97,76,13,27,48,55,4};
fast_sort(array,0,9);
print(array);
}
欢迎各位指出不足之处