/* * @type of arr: integer array * @type of left: integer(left most index of arr) * @type of right: integer(right most index of arr) * @type of k: integer(element to be searched) * @return type: integer(index of element k(if found), otherwise return -1) */ intbinarySearch(int arr[], int left, int right, int k) { while (left <= right) { // 查找中间元素 int mid = left + (right - left) / 2; // 判断 k 是否等于中间元素 if (arr[mid] == k) return mid; // 如果 k 等于中间元素,那么就返回下标 // 如果 k 大于中间元素,忽略数组的左半部分 if (arr[mid] < k) left = mid + 1; // 更新左侧,右侧将保持不变 // 如果 k 小于中间元素, 忽略数组的右半部分 else right = mid - 1; // 更新右侧,左侧将保持不变 } // 如果没有找到,则返回 -1 return -1; }
/* * @type of arr: integer array * @type of n: integer(length of arr) */ voidselectionSort(int arr[], int n) { // move from index 0 to n-1 for (int i = 0; i < n-1; i++) { // finding the minimum element int minIndex = i; for (int j = i+1; j < n; j++) if (arr[j] < arr[minIndex]) minIndex = j; // Swap the found minimum element with the ith element swap(arr[minIndex], arr[i]); } }
/* * @type of arr: integer array * @type of n: integer(length of arr) */ voidbubbleSort(int arr[], int n) { // move from index 0 to n-1 for (int i = 0; i < n-1; i++) for (int j = 0; j < n-i-1; j++) if (arr[j] > arr[j+1]) // comparing adjacent elements swap(arr[j], arr[j+1]); // swapping elements }
/* * @type of arr: integer array * @type of n: integer(length of arr) */ voidinsertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; // select value to be inserted int j = i - 1; // position where number is to be inserted // check if previous no. is larger than value to be inserted while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } // changing the value arr[j + 1] = key; } }
voidmerge(int* arr, int start, int mid, int end) { int temp[end - start + 1]; // creating temporary array int i = start, j = mid+1, k = 0; while(i <= mid && j <= end) // traverse and add smaller of both elements in temp { if(arr[i] <= arr[j]) { temp[k] = arr[i]; k += 1; i += 1; } else { temp[k] = arr[j]; k += 1; j += 1; } } // add the elements left in the 1st interval while(i <= mid) { temp[k] = arr[i]; k += 1; i += 1; } // add the elements left in the 2nd interval while(j <= end) { temp[k] = arr[j]; k += 1; j += 1; } // updating the original array to have the sorted elements for(i = start; i <= end; i += 1) { arr[i] = temp[i - start] } }
/* * @type of arr: integer array * @type of start: starting index of arr * @type of end: eningd index of arr */ voidmergeSort(int *arr, int start, int end) { if(start < end) { int mid = (start + end) / 2; // finding middle element mergeSort(arr, start, mid); // calling mergeSort for first half mergeSort(arr, mid+1, end); // calling mergeSort for second half merge(arr, start, mid, end); // calling merge function to merge the arrays } }