自设计算法
A. 请哥哥姐姐为我设计个简单的快速排序算法,C语言的,谢谢啦!
void QuickSort(int *a,int left,int right)
{
if ( left < right )
{
int i = left;
int j = right + 1;//why add 1?
int pivot = a[left];//youbiao
do
{
do
{
i++;//the second
} while ( a[i] < pivot );
do
{
j--;
} while ( a[j] > pivot );
if ( i < j )
{
swap(a[i],a[j]);
}
} while ( i < j );
if (left != j)
{
swap(a[left],a[j]);
}
//digui
QuickSort(a,left,j-1);
QuickSort(a,j+1,right);
}
}
//测试排序代码
void print(int *a,int n)
{
int i;
for ( i = 0 ; i < n ; i++ )
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int a[20];
myrand(a,20);
QuickSort(a,0,19);
print(a,20);
return 0 ;
}
呵呵 有问题再联系。。。。
B. 设计一个算法求出500的所有因数。
1、用筛法找质数
筛法,是求不超过自然数N(N>1)的所有质数的一种方法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratosthenes)。
具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。c这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛法”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)
例如,用筛法找出不超过30的一切质数:
不超过30的质数2,3,5,7,11,13,17,19,23,29共10个。
2、求因数
任意给定一个大于一的整数n,只要把小于等于根号n的所有质数都找到,分别确定这些质数是否为整数n的因数即可。