- #include <windows.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <ctime>
- #include <algorithm>
- #define ARRLEN 1000
- using namespace std;
-
- int arr[ARRLEN];
-
- int Patition(int arr3[], int low, int high)
- {
-
- int pivotkey=arr3[low];
- int temp = arr3[low];
-
- while(low<high)
- {
-
- while(low <high && arr3[high]>=pivotkey)
- {
- --high;;
- }
- arr3[low]=arr3[high];
- while(low<high && arr3[low]<=pivotkey)
- {
- ++low;;
- }
- arr3[high]=arr3[low];
- }
- arr3[low] = temp;
- return low;
-
- }
- void QuickSort(int arr3[], int low, int high)
- {
- if(low<high)
- {
- int pivotloc=Patition(arr3,low, high);
- QuickSort(arr3, low, pivotloc-1);
- QuickSort(arr3, pivotloc+1, high);
- }
- }
- int BinarySearch(int arr[],int start,int end,int key){
- if (arr[start]==key)
- return start;
- if (arr[end]==key)
- return end;
-
- while(start<end){
- int mid=(start+end)/2;
- if (arr[mid]==key){
- return mid;
- }
- if (arr[mid]>key)
- end=mid-1;
- else
- start=mid+1;
- }
- if(start>=end)
- return -1;
- }
- int SearchTheTimesOfK(int arr[],int start,int end,int key){
- int index=BinarySearch(arr,0,ARRLEN-1,key);
- if(index==-1)return index;
-
- int firstindex=index,lastindex=index;
- while (firstindex>=0&&arr[firstindex]==key)
- firstindex--;
- while(lastindex<ARRLEN&&arr[lastindex]==key)
- lastindex++;
-
- return lastindex-firstindex-1;
- }
- void InitArr(){
- for (int i=0,j;i<ARRLEN;i++)
- {
- j=rand()%1000;
- arr[i]=j;
- }
- }
- void Display(int arr[],int n){
- int i=0;
- while(n--){
- printf("%d ",arr[i]);
- i++;
- }
- }
- int main(void){
- InitArr();
- QuickSort(arr,0,ARRLEN-1);
- Display(arr,ARRLEN);
- printf("\n");
- int times=SearchTheTimesOfK(arr,0,ARRLEN-1,999);
- if (times!=-1)
- printf("%d",times);
- else
- printf("找不到!");
- getchar();
- return 0;
- }