经典排序算法的经典问题
Posted lshao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典排序算法的经典问题相关的知识,希望对你有一定的参考价值。
1.荷兰三色国旗问题
问题描述:一个数组只含有三种元素:0,1,2,不使用计数排序,将0放在1的左边,2放在1的右边。
分析:
1.可借鉴快排中划分的思想。将数组分为{0区},arr[],{2区}
2.遍历arr,当发现0时,0区向右扩,发现2时,2区向左扩,
3.当前元素进入2区时,结束。
vector<int> sortThreeColor(vector<int> A, int n) { // write code here int last0=-1; int first2=n; for(int i=0;i<n;i++){ if(i==first2) break; if(A[i]==0){ int temp=A[last0+1]; A[last0+1]=0; last0++; A[i]=temp; } if(A[i]==2){ int temp=A[first2-1]; A[first2-1]=2; first2--; A[i]=temp; i--;//(由于2区换来的数未进行判断,需重新判断一次) } } return A; }
2.行列矩阵查找元素的问题
问题描述:在一个行列都有序的二维矩阵中,找出某个元素。
如矩阵:1 2 3 4 查找元素6
2 3 3 4
3 4 6 7
分析:首先从矩阵右上角开始,如果当前元素e>6,则往左走,即列-1,如果e<6,则往下走,即行+1,否则找到。
如果当前元素下标超出矩阵范围,则找不到。
以上是关于经典排序算法的经典问题的主要内容,如果未能解决你的问题,请参考以下文章