问题
给一个数组,需要把其中的数字,根据num
按三个区域划分开(小于num、等于num、大于num)
不要有序。
思路
注意:向前 == 向左 向后 == 向右
需要两个变量under
、upwords
,在under
之前的为小于区域,在upwords
之后为大于区域
利用变量i
遍历数组:
-
arr[i] < num
,交换arr[i]
和小于区域的下一个数,小于区域往后移动,i
++ -
arr[i] > num
,交换arr[i]
和大于区域的前一个数,大于区域向前移动,i
不变 -
arr[i] = num,i++
-
i
碰到upwords
结束
实现
注意:under表示小于区域的下一个数据文章来源:https://www.toymoban.com/news/detail-434301.html
upwords表示大于区域的前一个数据文章来源地址https://www.toymoban.com/news/detail-434301.html
void DutchFlag(int arr[],int num,int lenth) /******lenth为arr长度******/ { int under = 0; int upwords = lenth - 1; int i = 0; while(i <= upwords) { if(arr[i] < num) { swap(arr[i],arr[under]); under++; i++; } else if(arr[i] > num) { swap(arr[i],arr[upwords]); upwords--; } else { i++; } } }
到了这里,关于荷兰国旗问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!