排序算法

#include "math.h"
//冒泡排序法
void BubbleSort(int* array,int length)
{
 int i,j;
 for(i=length; i>0; i--)
 {
  for(j=0; j<i-1; j++)
  {
   if(array[j] > array[j+1])
   {
    array[j] = array[j] + array[j+1];
    array[j+1] = array[j] - array[j+1];
    array[j] = array[j] - array[j+1];
   }
  }
 }
}
//快速排序法中使用的分区间子算法
int Partition(int *array, int low, int high)
{
 int pivotValue = array[low];
 while(low < high)
 {
  while(low<high && array[high]>=pivotValue)
   high--;
  array[low] = array[high];
  while(low<high && array[low]<=pivotValue)
   low++;
  array[high] = array[low];
 }
 array[low] = pivotValue;
 return low;
}
//快速排序
void QuickSort(int *array, int low, int high)
{
 int pivot;
 if(low < high)
 {
  pivot = Partition(array, low, high);
  QuickSort(array, low, pivot-1);
  QuickSort(array, pivot+1, high);
 }
}
//直接插入排序算法
void QuickInsertSort(int *array, int length)
{
 int iTemp;
 if(length <=1)
  return;
 for(int i=1; i<length; i++)
 {
  if(array[i]<array[i-1])
  {
   iTemp = array[i];
   for(int j=i-1; j>=0 && array[j]>iTemp; j--)
   {
    array[j+1] = array[j];
   }
   array[j+1] = iTemp;
  }
 }
}
//一趟希尔排序子算法
void ShellInsert(int *array, int dk, int length)
{
 int iTemp;
 if(dk >= length)
  return;
 for(int i=dk; i<length; i++)
 {
  if(array[i]<array[i-dk])
  {
   iTemp = array[i];
   for(int j=i-dk; j>=0 && array[j]>iTemp; j-=dk)
   { 
    array[j+dk] = array[j];
   }
   array[j+dk] = iTemp;
  }
 }
}
//希尔排序算法(对于直接插入排序的一种改进算法)
void ShellSort(int *array, int dlta[], int t, int length)
{
 for(int k =0; k<t; k++)
 {
  ShellInsert(array, dlta[k], length);
 }
}
//输出3-100之间的所有素数。
void PrimeNum(int iNumber)
{
 int k;
 if(iNumber ==2)
  printf(" 2 ");
 else
 {
  for(int i=3; i<=iNumber; i+=2)
  {
   k=sqrt(i);
   for(int j=2; j<k; j++)
   {
    if(i%j==0) break;
   }
   if(j>=k)
    printf(" %d ", i);
  }
 }
}
 
// 写一个函数,求一个整数的平方根
/*
 *  求a根的迭代公式为:  
  Xn+1=1/2*(Xn+a/Xn)       要求Xn和Xn+1的绝对差<1e-5;    
 */
int MySqrt(void )
{
 float   a,b,c;   
 scanf("%f",&a); 
 
 b=a/2.0;  
 c=1.0/2*(b+a/b);  
 while(fabs(b-c)>1e-5)  
 {  
   b=1.0/2*(c+a/c);  
   c=1.0/2*(b+a/b);  
 }  
 printf("a   root   is   %f",b);  
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值