牛客网初级算法(1)
来源:互联网 发布:二维数组下标越界 编辑:程序博客网 时间:2024/06/06 18:09
冒泡排序
void BubbleSort(int arr[],int n){ if(n==1||n==0) return; for(int e=n-1;e>0;e--){ for(int i=0;i<e;i++){ if(arr[i]>arr[i+1]) swap(arr,i,i+1); } }}void swap(int arr[],int i,int j){ arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j];}
插入排序
void InsertSort(int arr[],int n){ if(n==1||n==0) return; for(int i=1;i<n;i++){ for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--) swap(arr,j,j+1); }}
选择排序
void SelectSort(int arr[],int n){ if(n==1||n==0) return; for(int i=0;i<n-1;i++){ int minIndex=i; for(int j=i+1;j<n;j++){ minIndex=arr[j]<arr[minIndex]?j:minIndex; } swap(arr,i,minIndex); }}
归并排序
void mergeSort(int arr[],int l,int r){ if(l==r) return; int mid=l+((r-l)>>1);//防止溢出,>>代表右移一位 mergeSort(arr,l,mid); mergeSort(arr,mid+1,r); merge(arr,l,mid,r);}void merge(int arr[],int l,int m,int r){ int help[MAXSIZE]; int i=0,p1=l,p2=m+1; while(p1<=m&&p2<=r) help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++]; while(p1<=m) help[i++]=arr[p1++]; while(p2<=r) help[i++]=arr[p2++]; for(i=0;i<sizeof(help)/sizeof(int);i++) arr[l+i]=help[i];}
快速排序
**要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。**
void QuickSort(int arr[],int l,int r){ if(l<r){ swap(arr,(rand() % (r-l))+ l),r);//随机找到一个数,交换到队尾,防止出现badcase:1 2 3 4 5 6这种情况 int p[2]=partition(arr,l,r); quickSort(arr,l,p[0]-1); quickSort(arr,p[1]+1,r); }}int partition[](int arr[],int l,int r){ int less=l-1; int more=r; while(l<more){ if(arr[l]<arr[r]) swap(arr,++less,l++); else if(arr[l]>arr[r]) swap(arr,--more,l); else l++; } swap(arr,more,r);//将选出的part值和大于区的队头交换 int p[2]; p[0]=less+1; p[1]=more; return p;}
注:在不申请额外空间的情况下,是很难实现将一个数组中的奇数和偶数分开,并且保持相对顺序不变。
阅读全文
0 0
- 牛客网初级算法(1)
- 算法导论--初级1
- 第1篇 初级排序算法
- 算法学习(1)——初级排序算法
- ACM初级算法
- java初级算法
- 算法初级_1:字符
- 算法初级_4 :字符串
- 初级排序算法实现
- 初级排序算法总结
- js初级脚本算法
- FreeCodeCamp初级算法
- 算法初级练习
- 初级排序算法
- js初级脚本算法
- JavaScript初级脚本算法
- 小结 | 初级贪心算法
- 初级高精度算法
- Shiro (二) JDBC Realm
- Mybatis问题:There is no getter for property named 'Id' in 'class java.lang.String'
- 1048. 数字加密(20)
- 11.14学习心得
- Python + selenium 实践问题(一)
- 牛客网初级算法(1)
- SQL Server2008 学习之(五) :规则与约束的用法与联系
- 我的校招总结
- 警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:sss
- xshell远程连接工具不能连接本地刚安装的linux系统(网络模式选择“NAT模式”)
- 用户注册数据库登记
- ios面试题详解-二
- 2017深信服校招笔经面经 软件测试工程师
- 小练习