二分查找和快速排序

快排的中心思想,就是選取一個元素通過一趟排序將比這個元素大的換到前面,把這個元素小的換到後面。然後在繼續進行排序。

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;
	}
	



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