码迷,mamicode.com
首页 > 其他好文 > 详细

编程算法 - 快速排序(QuickSort)和二分查找(BinarySearch)

时间:2014-09-10 17:48:40      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:mystra   编程算法   快速排序   二分查找   代码   

快速排序(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);
		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;
}





bubuko.com,布布扣


编程算法 - 快速排序(QuickSort)和二分查找(BinarySearch)

标签:mystra   编程算法   快速排序   二分查找   代码   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/39178401

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!