C语言实现递归的快速排序
程序员文章站
2022-03-24 15:28:54
...
C语言实现递归的快速排序
目录
文章目录
原理
- 原理这里就不多阐述了,主要就是使用头尾两个指针,对待排序数组进行操作,递归的收敛返回条件是头尾两个指针重叠。注意这里在操作指针的之后(特别是对指针进行加减运算之后),或者在指针传入函数之前,必先检查指针是否越界。越界之后将造成不可预估的输出。
代码
#include<stdio.h>
#include<stdlib.h>
int sort(int * h, int *t)
{
int *tempt = t;
int *temph = h;
int temp = 0;
if (h==NULL||t==NULL) return 0;
else
{
if (h == t) return 0;
else
{
//判断头尾指针是否重合
while (tempt!=temph)
{
//方向h->t
if (*tempt<*temph)
{
temp = *tempt;
*tempt = *temph;
*temph = temp;
temph++;
//判断头尾指针是否重合
while (temph!=tempt)
{
//方向h<-t
if (*tempt<*temph)
{
temp = *tempt;
*tempt = *temph;
*temph = temp;
tempt--;
break;
}
else temph++;
}
}
else tempt--;
}
}
}
//注意这里判断指针是否越界
if (temph-1>=h) sort(h, temph - 1);
if (tempt+1<=t) sort(temph + 1, t);
return 0;
}
int main()
{
int a[] = { 3,5,2,7,1,8,4,9,6,0 };
int len = sizeof(a) / sizeof(int);
if (!sort(&a[0], &a[len-1]))
for (int i = 0; i<len; i++) printf(" %d ", a[i]);
else printf("error\n");
printf("\n");
getchar();
return 0;
}
上一篇: python的matplotlib.pyplot绘制甘特图
下一篇: 【算法】桶排序和基数排序