// 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;
}