快速排序 和 二分查找
2013-12-21 23:19
260 查看
快速排序基本思想: 首先选择待排序的序列的首个或者最后一个,抑或是随机产生的下标所在元素作为参考值,然后将序列中比参考值大的元素放在参考值右边,把比参考值小的元素值放在参考值的左边。然后在将第一轮结束后新的首个元素作为参考,继续重复上一步骤,每一个步骤确定一个元素的最终位置,最后达到排序效果。
#include <stdio.h> #ifndef N #define N 5 #endif int partition(int arr[],int low,int high) { int key; key = arr[low]; while(low < high) { while(arr[high] >= key && low < high) high--; if(low<high) arr[low++] = arr[high]; while(arr[low] <= key && low < high) low++; if(low<high) arr[high--] = arr[low]; } arr[low] = key; return low; } void quick_sort(int arr[],int low,int high) { int i; if(low<high) { i = partition(arr,low,high); quick_sort(arr,low,i-1); quick_sort(arr,i+1,high); } return ; } int main() { int arr = {3,1,9,7,5}; printf("Before sort\n"); int i = 0; for(i=0;i<N;i++) { printf("%d\t",arr[i]); } printf("\n"); quick_sort(arr,0,4); printf("After sort:\n"); for(i=0;i<N;i++) { printf("%d\t",arr[i]); } }
二分查找的基本思想:
将所要查找的升序序列的中间位置的数据元素与目标元素进行比较,如果相等表情查找成功;如果两者不相等,则根据其大小关系将查找目标序列缩小到以中间位置的元素为参考的另一半序列进行查找,同时也继续以中间位置元素为参照进行比对,不断重复,最后返回中间元素下标。
#include <stdio.h>#include <stdlib.h>#define N 5binary_search(int arr[], int n, int key){ int low = 0; int high = n-1; while(low < high) { int mid = (low + high)/2; int midval = arr[mid]; if(midval < key) low = mid + 1; else if(midval > key) high = mid - 1; else return mid; } return -1;}int main(){ int i,val,ret; int arr = {1,3,5,7,9}; for(i=0;i<N;i++) { printf("%d\t",arr[i]); } printf("\n"); printf("Please enter the value you want to search:\n"); scanf("%d",&val); ret = binary_search(arr,N,val);fflush(stdout); if(-1 == ret) printf("The value is not existed!\n"); else printf("Successfully search the value!\n"); return 0;}
相关文章推荐
- 快速排序 约瑟夫问题 顺序查找 二分查找
- 递归算法——归并排序,快速排序,二分查找
- 冒泡排序 二分查找 快速排序 线性查找
- 拓扑排序, 快速排序, 冒泡排序, 堆排序, 二分查找
- 2013 0314 二分查找 快速排序 空间复杂度
- 快速排序与二分查找
- 插入,冒泡,选择,快速排序,二分查找
- 快速排序模板和二分查找
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
- 归并排序、插入排序、快速排序、二分查找的c++实现
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 各种排序方法(冒泡,快速,插入,选择),二分查找
- #1133 : 二分·二分查找之k小数 ( 快速排序, 分治 OR nth_element() 函数)
- 顺序表的增删查改、二分查找、冒泡和快速排序
- c语言 快速排序 和 二分 查找 模型
- 快速排序和二分查找时间复杂度详解
- 【模版】快速排序,二分查找及其求其上下界函数
- 快速排序+二分查找
- NYOJ.904 search(二分查找,快速排序,结构体运用)