排序法 二分查找法

来源:互联网 发布:qq邮箱端口和发送smtp 编辑:程序博客网 时间:2024/05/16 17:47

// test.cpp : Defines the entry point for the console application.
//whg 2007-12-26

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
//折半查找法 二分查找法
int BinarySearch(int a[],int x,int n)
{
 int left=0;
 int right=n-1;
 while (left <= right)
 {
  int middle=(left+right)/2;
  if (x==a[middle])
  {
   return middle;
  }
  else
  {
   if (x >a[middle])
   {
    left=middle+1;
   }
   else
   {
    right=middle-1;
   }
  }
 }
 return -1;
}
//选择排序法
void SelectSort(int arr[],int n)
{
 int i,j;
 int temp;
 int index;
 for (i=0;i<n;i++)
 {
  temp=arr[i];
  index=i;
  for (j=i+1;j<n;j++)
  {
   if (temp > arr[j])
   {
    temp=arr[j];
    index=j;
   }
  }
  arr[index]=arr[i];
  arr[i]=temp;
 }
}
//冒泡排序法
void BubbleSort(int arr[],int n)
{
 int i,j;
 int temp;
 for (i=n-1;i>0;i--)
 {
  for (j=i-1;j>=0;j--)
  {
   if (arr[i]<arr[j])
   {
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
   }
  }
 }
}
//双向冒泡排序法
void Bubble2Sort(int arr[],int n)
{
 int i,j;
 int index,temp;
 int left=0;
 int right=n-1;
 do
 {
  //正向
  for (i=right;i>left;i--)
  {
   if (arr[i] < arr[i-1])
   {
    temp=arr[i];
    arr[i]=arr[i-1];
    arr[i-1]=temp;
    index=i;
   }
  }
  left=index;
  //反向
  for (j=left;j<right;j++)
  {
   if (arr[j] > arr[j+1])
   {
    temp=arr[j];
    arr[j]=arr[j+1];
    arr[j+1]=temp;
    index=j;
   }
  }
  right=index;
 } while (left < right);
}
//希尔排序法
void ShellSort(int arr[],int n)
{
 int i,j;
 int temp;
 int len=n/2;
 for (i=n;len>0;len--)
 {
  for (j=0;j<n-len;j++)
  {
   if (arr[j] > arr[j+len])
   {
    temp=arr[j];
    arr[j]=arr[j+len];
    arr[j+len]=temp;
   }
  }
 }
}
//快速排序法
void QuickSort(int arr[],int left,int right)
{
 int i,j;
 int middle,temp;
 i=left;
 j=right;
 middle=arr[(left+right)/2];
 do
 {
  while((arr[i]<middle) && (i<right))
   i++;
  while((arr[j]>middle) && (j>left))
   j--;
  if (i <= j)
  {
   temp=arr[i];
   arr[i]=arr[j];
   arr[j]=temp;
   i++;
   j--;
  }
 } while (i <= j);
 if (left < j)
 {
  QuickSort(arr,left,j);
 }
 if (right > i)
 {
  QuickSort(arr,i,right);
 }
}
int main(int argc, char* argv[])
{
 
 //长度为50的自然数数组
 int n[50];
 int count=100;
 for(int i=0;i<50;i++)
 {
  n[i]=count;
  count=count-2;
 }
 //显示数组
 for (int j=0;j<50;j++)
 {
  if (j != 49)
  {
   printf("%d,",n[j]);
  }
  else
  {
   printf("%d",n[j]);
  }
  
 }
 printf("/n");
 BubbleSort(n,50);
 //显示数组
 for (int k=0;k<50;k++)
 {
  if (k != 49)
  {
   printf("%d,",n[k]);
  }
  else
  {
   printf("%d",n[k]);
  }
  
 }
 printf("/n");
 //生成一个0到100的随机数
 srand((unsigned)time(NULL));
 int m=rand()%101;
 printf("%d/n",m);
 //利用折半查找法 在数组中查找这个数
 int index = BinarySearch(n,m,50);
 printf("%d/n",index);
 return 0;

}