快速排序(QuickSort)和二分查找(BinarySearch)
本文地址: http://blog.csdn.net/caroline_wendy
快速排序和二分查找的定义, 网上书上都有, 本文主要是讲解如何写出这两个经典算法.
程序员必须掌握的两种算法, 使用任何语言, 使用纸都是必须的.
快速排序(C):
- /*
- * main.cpp
- *
- * Created on: 2014年9月10日
- * Author: Spike
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <iostream>
- #include <exception>
- int RandomInRange(int start, int end) {
- int res = rand()%(end-start+1) + start;
- return res;
- }
- void Swap(int* num1, int* num2) {
- int tmp = *num1;
- *num1 = *num2;
- *num2 = tmp;
- }
- int Partition(int data[], int length, int start, int end) {
- if (data == NULL || length <= 0 || start > end || start < 0 || end >= length) {
- return -1;
- }
- int index = RandomInRange(start, end);
- Swap(&data[index], &data[end]);
- int small = start-1;
- for (index = start; index < end; ++index) {
- if (data[index] < data[end]) {
- small++;
- if (small != index)
- Swap(&data[index], &data[small]);
- }
- }
- small++;
- Swap(&data[small], &data[end]);
- return small;
- }
- void QuickSort(int data[], int length, int start, int end) {
- if (start == end)
- return;
- int index = Partition(data, length, start, end);
- if (index > start)
- QuickSort(data, length, start, index-1);
- if (index < end)
- QuickSort(data, length, index+1, end);
- }
- int main(void) {
- int data[] = {1, 4, 5, 2, 3, 7, 8, 6};
- int length = 8;
- QuickSort(data, length, 0, length-1);
- for (int i=0; i<length; ++i) {
- printf("%d ", data[i]);
- }
- printf("\n");
- return 0;
- }
二分查找(C):
- /*
- * main.cpp
- *
- * Created on: 2014年9月10日
- * Author: Spike
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <iostream>
- #include <exception>
- int BinarySearch(int data[], int length, int value) {
- int left = 0;
- int right = length-1;
- while (left <= right) {
- int middle = left + ((right-left)>>1);
- if (data[middle] > value)
- right = middle - 1;
- else if (data[middle] < value)
- left = middle + 1;
- else
- return middle;
- }
- return -1;
- }
- int main(void) {
- int data[] = {1, 2, 3, 4, 5, 6, 7, 8};
- int length = 8;
- printf("%d ", BinarySearch(data, length, 5));
- printf("\n");
- return 0;
- }