随便记录下一些简单算法:
大概就是一个数字数组{4,1.5,6,8,14,2,6,8,2,34,5,7,8} 输入关键字 把数组分法为 小于关键字在数组左边,等于中间,大于在右边~
实现:
#include <stdio.h>
#define LENGTH(type,point) (sizeof(point)/sizeof(type))
void Print(const int *a, int len)
{
int i = 0;
while(i<len)
{
printf("%d,", a[i++]);
}
printf("\n");
}
void swap(int *a, int src, int des)
{
int tem = a[src];
a[src] = a[des];
a[des] = tem;
}
void partition(int *a, int len, int key)
{
int iFlag = -1;
int jFlag = -1;
int k = 0;
for (; k < len; ++k)
{
if ( a[k] == key )
{
swap(a,++iFlag,k);
}else if ( a[k] < key )
{
swap(a,++iFlag,k);
swap(a,++jFlag,iFlag);
}
}
}
int main()
{
int cTest[] = {4,1.5,6,8,14,2,6,8,2,34,5,7,8};
int key = 0;
Print(cTest,LENGTH(int,cTest));
printf("Input Key:");
scanf("%d",&key);
partition(cTest,LENGTH(int,cTest),key);
Print(cTest,LENGTH(int,cTest));
return 0;
}