关闭

随机产生N个整数,并对其进行排序,查找……

369人阅读 评论(0) 收藏 举报

 

#include <stdlib.h>
#include 
<stdio.h>
#include 
<time.h>   //使用当前时钟做种子

#define N 100

void Produce(int *dat)  //产生N个随机大小的整数
{
 
int i;
 srand( (unsigned)time( NULL ) );
//初始化随机数
 for( i = 0; i < N; i++ )
  dat[i] 
= rand(); 
}


void Output(int dat[])  //输出函数
{
 
int i;
 
for (i = 0; i < N; i++)
  printf(
"dat[%d]=%d ",i,dat[i]);
 printf(
" ");
}


void Swap(int &a, int &b) //交换两个变量的值
{
 
int temp;
 temp 
= a; a = b; b = temp;
}


int Partition(int *dat,int p,int r)//把 < x 的元素换到左边的区域,把 > x 的元素换到右边的区域
{
 
int i = p, j =+ 1;
 
int x = dat[p];
 
while (1)
 
{
  
while(dat[++i]<&& i<r);
  
while(dat[--j]>x);
  
if(i>=j) break;
  Swap(dat[i],dat[j]);
 }

 dat[p] 
= dat[j];
 dat[j] 
= x;
 
return j;
}


void QuickSort(int *dat,int p,int r)  //快速排序
{
 
if(p<r)
 
{
  
int q = Partition(dat,p,r);
  QuickSort(dat,p,q
-1);
  QuickSort(dat,q
+1,r);
 }

}


int BinarySearch(int *dat,int &data, int n) //二分查找
{
 
int left = 0;
 
int right = n-1;
 
while (left <= right)
 
{
  
int middle = (left+right)/2;
  
if(data==dat[middle]) return middle;
  
if(data > dat[middle])  left = middle + 1;
  
else right = middle - 1;
 }

 
return -1;
}


void main( void )
{
 
int data,temp,n;
 n 
= N;
 
int *dat;
 dat 
= new int[n];
 Produce(dat);
 Output(dat);
 QuickSort(dat,
0,N-1);
 Output(dat);
 printf(
"请输入要查找的数据:");
 scanf(
"%d",&data);
 temp 
= BinarySearch(dat,data,n);
 
if(temp==-1) printf("没有找到! ");
 
else printf("找到了,%d=dat[%d]…… ",data,temp);
}
    
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12016次
    • 积分:342
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章存档