快排,二分查找

原创 2016年05月30日 10:03:23
// search_Bin.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

int binSearch(int a[6], int x, int len );

int posFun(int * a, int low, int heigh);


int binSearch(int a[6], int x, int len ){

	int low = 0;
	int heigh = len - 1;
	int mid;

	while (low <= heigh)
	{
		mid = (low + heigh)/2; 
		if (a[mid] < x)
		{
			low = mid + 1;
		}else{
			if(a[mid] > x){
				heigh = mid - 1;
			}else{
				return mid;
			}
		}
	}

	return -100;


}

void quickSort(int a[], int low, int heigh){

	int positacion = 0;
	positacion = posFun(a, low, heigh);

	if (low < heigh)
	{
		quickSort(a, low, positacion -1);
		quickSort(a, positacion + 1, heigh);
	}
}

int posFun(int * a, int low, int heigh){

	int var = a[low];

	//while循环退出的条件是 low == heigh 这点要注意
	while (low < heigh)
	{

		while (low < heigh && (a[heigh] > var ))
			--heigh;
		a[low] = a[heigh];

		while (low < heigh && a[low] < var)
			++low;
		a[heigh] = a[low];

	}

	a[low] = var;

	return low;

}

int _tmain(int argc, _TCHAR* argv[])
{
	int a[6] = {1, 2, 3, 4, 5, 6};

	int resultVal;

	resultVal = binSearch(a, 4, 6);

	printf("the val is %d", resultVal);

	int b[6] = {3, 1, 4, 8, 9};

	quickSort(b, 0, 5);

	
	for (int i = 0; i < 5; i++)
	{
		printf("the val is %d", b[i]);
	}

	return 0;
}

void BubbleSort(int x[],int n)
{
	int i,j;
	bool Exchange;  //记录交换标志
	for(int i=1;i < n - 1; i++)    //最多做n-1趟排序
	{
		Exchange = false;
		for(j=n-1;j>=i;--j)
		{
			if(x[j]>x[j+1])
			{
				x[0] = x[j];
				x[j] = x[j+1];
				x[j+1] = x[0];
				Exchange = true;   //发生了交换,设置标志为真.
			}
		}
		if (!Exchange )      //为发生替换,提前终止算法
			return;

	}
}

二分查找与快排算法

最近公司比较闲,想起进公司面试题,一个简单的排序。但是当时只写出了优化后的冒泡。尝试快排失败。实现low。 这两个都是用到分治的思想很容易搞混。还有一个叫二分排序的,其实就是快排的核心,二分查找和快速...
  • zxc8471
  • zxc8471
  • 2017年03月22日 11:32
  • 343

二分查找 归并排序 快排 详解C++

这三个排序算法一直是面试的重点,大多数都是C语言写的,今天整理了一下C++的写法,思想都差不多。这几个排序经常忘记,今天抽空记在这,以便自己以后查阅,不对的地方,也欢迎大家评论,不吝指正,谢谢! 二...

快排&归并&二分查找

算法实验:#include #include #include #include #include #include #include #include #include using namespac...
  • algzjh
  • algzjh
  • 2017年05月29日 11:06
  • 142

剑指Offer面试题8旋转数组的最小数字(二分查找)附带快排和按年龄排序

面试题8:旋转数组的最小数字 把一个数组最开始的几个元素搬到数组末尾,我们称之为数组的旋转,输入一个递增的数组的旋转,输出它的最小元素。如{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,输...

js 快排+二分查找+插入/希尔排序(根据自己的理解和老师的讲解)

我有一个我们老师的ppt,还是讲的蛮清楚的。主要是快排动画理解方便~ ppt在 http://download.csdn.net/detail/xulanshan33/9770329 1.不同的去...

二分查找的改进 差值查找(low<=high,这与快排low<high)

//二分查找的改进,是把原来的mid的计算进行了优化,而非中位数形式;思想是根据所查找的数与low high的所对应的数的比率 改进的二分查找的函数:基本思想是,充分利用关键字本身的信息,用关键字和l...

面试题目-堆排、快排、二分查找

排序面试题目 近期在忙着找工作,由于专业跨度的原因,稍微有些焦头烂额,在方向上有些失衡。有种很奇怪的感觉,我不知道换联网公司到底需要什么样的人才,(/ □ \),好了,吐槽结束了,该继续得还得继续...

Java基础算法:堆排,快排,二分查找

Java基础算法:堆排,快排,二分查找 1. 堆排 满二叉树:所有叶结点都有同样的深度,每个内部结点都有两个儿子 完全二叉树:若二叉树的高度为h,除第h层外,其他各层(1 ~ h -1)的结点数...

字符串查找(二分和快排的运用)

Description 现在给你一个字典,再给出几个字符串,让你查找,这些字符串是否在其中。   Input 第一行是两个整数M,N分别表示字典数和字符串数。 第2至第M+1行,每一行是一个字典。 ...

排序算法--折半插入排序(二分查找排序)

? 折半插入排序其实就是直接插入排序的一种改进,引入了二分查找算法,这样关键字的比较次数就会减少, 数量级为O(nlog^2n),但是元素移动次数还是O(n^2),所以折半插入排序的时间复...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快排,二分查找
举报原因:
原因补充:

(最多只允许输入30个字)