快速排序和二分查找的练习
2017-04-28 10:47
381 查看
*快速排序和二分查找的练习
初始序列为:87654321
快速排序后为:12345678 (L.r[0]位置为哨兵位置,不是序列中的元素,不参与排序和输出,为快速排序特用)
二分查找(前提为有序序列)5,返回位置5*
初始序列为:87654321
快速排序后为:12345678 (L.r[0]位置为哨兵位置,不是序列中的元素,不参与排序和输出,为快速排序特用)
二分查找(前提为有序序列)5,返回位置5*
#include <iostream.h> typedef struct { int* r; int length; }SqList; #define M 8 void InitList(SqList &L,int n){ L.r=new int[M+1]; //开辟M+1个空间,其中第0个位烧饼位 int i; L.length=n; for(i=1;i<=n;i++){ L.r[i]=M-i+1;//87654321 //cout<<L.r[i]<<","; } } int find(SqList L,int key,int low,int high){ int mid; while(low<=high){ mid=(low+high)/2; if(L.r[mid]>key) high=mid-1; else if(L.r[mid]<key) low=mid+1; else if(L.r[mid]==key) return mid; } return -1;//查找失败 } /* int Partition ( SqList &L,int low,int high ) { L.r[0] = L.r[low]; int pivotkey = L.r[low]; while ( low < high ) { while ( low < high && L.r[high] >= pivotkey ) --high; L.r[low] = L.r[high]; while ( low < high && L.r[low] <= pivotkey ) ++low; L.r[high] = L.r[low]; } L.r[low]=L.r[0]; return low; } void QSort ( SqList &L,int low,int high ) { if ( low < high ) { int pivotloc = Partition(L, low, high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); } } */ int Patition(SqList &L,int low,int high){ L.r[0]=L.r[low]; while(low<high){ while(low<high&&L.r[0]<=L.r[high]) high--; L.r[low]=L.r[high]; while(low<high&&L.r[0]>=L.r[low]) low++; L.r[high]=L.r[low]; } L.r[low]=L.r[0]; return low; } void Quick(SqList &L,int low,int high){ if(low<high){ int pk=Patition(L,low,high); Quick(L,low,pk-1); Quick(L,pk+1,high); } } void show(SqList L){ int i; for(i=1;i<=M;i++){ cout<<L.r[i]<<","; } } void main(){ SqList L; InitList(L,8); show(L); cout<<endl; //QSort ( a667 L, 1, L.length ); int low=1,high=M; Quick(L,low,high); show(L); cout<<endl; cout<<find(L,5,1,8)<<endl; }
相关文章推荐
- 快速排序和二分查找的练习
- 快速排序qsort()函数和二分查找bsearch()函数
- 2013 0314 二分查找 快速排序 空间复杂度
- 快速排序和二分查找时间复杂度详解
- javaseday34补充2(数组 函数 匿名函数 数组排序 封装的力量 二分查找复习 数组小练习 查找 反转 )
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
- NYOJ.904 search(二分查找,快速排序,结构体运用)
- c语言 快速排序 和 二分 查找 模型
- 快速排序 约瑟夫问题 顺序查找 二分查找
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 快速排序与二分查找
- 快速排序 和 二分查找
- #笔记#圣思园 JavaSE 第35讲——冒泡排序、交换排序、快速排序、二分查找
- 插入,冒泡,选择,快速排序,二分查找
- 给大家分享下:快速排序、冒泡排序、二分查找
- 递归算法——归并排序,快速排序,二分查找
- 数组 获取最值(最大值 最小值)选择排序 冒泡排序 快速排序 半查找(二分查找) 十进制转其他进制法
- #1133 : 二分·二分查找之k小数 ( 快速排序, 分治 OR nth_element() 函数)
- 算法---冒泡排序,快速排序,二分查找(折半查找),选择排序,插入排序
- 顺序表的增删查改、二分查找、冒泡和快速排序