Lab 3 part 2 Code
unknown
plain_text
4 years ago
2.2 kB
11
Indexable
#include "stdio.h"
#include <stdlib.h>
int* generate_random_array(int n)
{
//create array of n elements
int* arr=(int*)malloc(n*sizeof(int));
//int* arr=(int*)calloc(n,sizeof(int));
//initialize it with random numbers
int seed =13;
srandom(seed);
int i;
for(i=0;i<n;i++)
{
int rnd=(int)random(); //0 -> 2,147,483,648
rnd=(int)(((double)rnd/(double)RAND_MAX)*100.0);
arr[i]=rnd;
}
return arr;
}
int selection_sort(int* arr,int n)
{
//implement selection sort
int i;
//loop to do n searches for the minimum
for(i=0;i<n;i++)
{
//for loop to find the minimum
int min =arr[i];
int min_idx=i;
int j;
for (j=i;j<n;j++)
{
if(min>arr[j])
{
min=arr[j];
min_idx=j;
}
}
//swap the min found with the first element (exchange arr[i] with arr[min_idx]
int temp=arr[i];
arr[i]=arr[min_idx];
arr[min_idx]=temp;
}
return 0;
}
int binary_search(int* arr,int n,int val)
{
int idx=-1;
int start=0;
int end=n-1;
int middle;
//keep changing the start and the end variables
//depending of which part of the array the value might be
for(;;)
{
middle=(start+end)/2;
if(val>arr[middle])
{
//we are at the right side of the array
//change the start to be middle
start=middle;
if((end-start<2))
{
idx=start;
return idx;
}
}
else if(val<arr[middle])
{
//we are at the left side of the array
//change the start to be middle
end=middle;
if((end-start<2))
{
idx=start;
return idx;
}
}
else
{
val=arr[middle];
idx=middle;
return idx;
}
}
return idx;
}
int print_array(int* arr,int n)
{
int i;
for (i=0;i<n;i++)
{
printf("%d, ",arr[i]);
}
printf("\n");
return 0;
}
int main()
{
int n=20;
int* arr = generate_random_array(n);
//print the array before sorting
print_array(arr,n);
selection_sort(arr,n);
//print the array after sorting
print_array(arr,n);
//binary search for a value
int idx=binary_search(arr,n,64);
printf("idx= %d\n",idx);
} Editor is loading...