//试试这个行不行
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std ;
const int SIZE = 100 ;
inline void exchange( int& x , int& y ) {
int t = x ;
x = y ;
y = t ;
}
void printarray(int source[] , int size){
for ( int i = 0 ; i < size ; i++)
cout << setw(8) << source[i] ;
}
void creatarray(int source[] , int size){
//产生随机数
srand( static_cast<int>(time(0)) ) ;
for(int i = 0 ; i < size ; i ++ )
source[i] = rand() % size ;
}
void quicksort(int source[] , int start , int end )
{
//快速排序
if( start < end ){
int i = start ;
int j = end + 1 ;
while( i < j ) {
i++;
while( source[i] < source[start] )
++i ;
j--;
while( source[j] > source[start] )
--j ;
if( i < j )
exchange(source[i] , source[j]) ;
}
exchange(source[j] , source[start]) ;
quicksort(source , start , j-1) ;
quicksort(source , j+1 , end) ;
}
}
void bubblesort(int source[] , int size) {
//冒泡排序
for ( int i = 0 ; i < size ; i++ )
for ( int j = size ; j > i ; j-- ) {
if ( source[j] < source[j-1] )
exchange(source[j] , source[j-1]) ;
}
}
int binarysearch(int source[] , int size , int num) {
//二分查找,返回 num 在 source 中的位置
int start = 0 , end = size-1 , mid ;
while(start <= end) {
mid = (start+end) / 2 ;
if( source[mid] == num )
return mid ;
else if ( source[mid] > num )
end = mid - 1 ;
else
start = mid + 1 ;
}
return -1 ;//找不到返回 -1
}
int search(int source[] , int size , int num) {
//顺序查找,返回 num 在 source 中的位置
for ( int i = 0 ; i < size ; i++ ) {
if(source[i] == num)
return i ;
}
return -1 ;//找不到返回 -1
}
int main(){
int source[SIZE] , i = 0 , pos = 0 ;
creatarray(source , SIZE) ;
//quicksort(source , 0 , SIZE-1) ;//排序
bubblesort(source , SIZE-1) ;
printarray(source,SIZE) ;
cout << "输入要查找的数,-1 退出" << endl ;
cin >> i ;
while( i != -1 ) {
pos = binarysearch(source,SIZE,i) ;//查找
//pos = search(source,SIZE,i) ;
if( pos != -1 )
cout << "found" << endl << "位置:" << pos << endl ;
else
cout << "not found" << endl ;
cout << "输入要查找的数,-1 退出" << endl ;
cin >> i ;
}
return 0 ;
}
如果有问题我再修改。
温馨提示:答案为网友推荐,仅供参考