二分查找和快速排序

快排的中心思想,就是选取一个元素通过一趟排序将比这个元素大的换到前面,把这个元素小的换到后面。然后在继续进行排序。

void sort(int datas[],int low,int high){
		if(low >= high){
			return;
		}
		int first = low;
		int last = high;
		int key = datas[first];
		while (first < last) {
			while (first < last && datas[last] >= key) {
				last--;						//10,3,5,23,9,12,22
			}
			datas[first] = datas[last]; 	//[9],3,5,23,9,12,22--------> 10 = 9  last = 4 从尾部开始找到 比key(第一个元素)小的,然后将比key大的放到首部
			while (first < last && datas[first] <= key) {
				first++;					//9,3,5,23,9,12,22	first = 3
			}
			datas[last] = datas[first];		//[9],3,5,23,9,12,22    				从头部开始找到 比key(第一个元素)大的,然后将比key小的放到尾部
		}
		datas[first] = key;
		sort(datas, low, first -1);
		sort(datas, first + 1, high);
	}
二分查找的思想就是取中间元素和目标元素比较,如果比目标大,则比下限,如果比目标小则比上限。

	int find(int datas[],int dst){
		int low = 0;
		int high = datas.length -1;
		while (low <= high) {
			int middle = (low + high) >> 1;
			if(datas[middle] == dst){
				return middle;
			}else if (datas[middle] < dst) {
				low = middle;
			}else {
				high = middle;
			}
		}
		return -1;
	}
	



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章