我写的比较弱的快排算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int in[10001]={8,1,3,1,4,0,0,100,0};
void qSort(int head, int tail)
{
int temp = in[head];
int low = head;
int high = tail;
if(low>=high) return;
while(low<high)
{
while(in[high]>=temp&&high>low) high--;
in[low] = in[high];
while(in[low]<=temp&&low<high) low++;
in[high] = in[low];
}
in[low] = temp;
qSort(head,low-1);
qSort(low+1,tail);
}
void printSort()
{
int i=0;
for(i=1;i<=in[0];i++)
{
printf("%d,",in[i]);
}
}
int main()
{
/*while(scanf("%d",&in[i]))
{
}*/
int len = in[0];
qSort(1,len);
printSort();
return 0;
}
别人写的带标志位的快排算法,当然比我写的简洁好看地多
void qsort(int* begin, int* end, bool cmp)
{
assert(begin != NULL && end != NULL);
int *p = begin;
int *q = end;
int temp = *p;
while(p>q)
{
while (p<q && (cmp ? (*q >= temp):(*q <= temp))) q--;
*p = *q;
while (p<q && (cmp ? (*q <= temp):(*q >= temp))) p++;
*q = *p;
}
*p = temp;
qsort(begin, p-1, cmp);
qsort(p+1,end,cmp);
}