Swift.堆排序

i c } m l p a o s r s f } f } t u u H n n F e c c o a v w } v v w } r v v w } u p s a / a h a a h e h a a h n S o r 1 r i r r i t e r r i d o r . l l u a l a r t s 初 i e h i j l e l s s h j l r p l c e i } i } } t t ( 始 e / e [ [ / e n A o h f f e i S _ = 化 = i a - = = j 交 t j 0 再 a - + d c i c l o o 堆 p = 换 ] ] 调 p = = s j l h c s s n l n n n > A n 0 > 首 t 整 A u = d i h c [ l s s l c e b u : . = d 1 . 尾 e = = d 1 1 s l i h l e [ [ o h r t c j c 0 节 m j t l = d l i o t l c c i { e i [ o 0 u o 点 p s t u ( o d l c o h l a o I u s u { [ e s _ c 2 < d ] t c i = d k n n n { t n = 0 m t a * + e ] l t t ( t ] p ( s l l l + < m d c = { ] / & s & : o e 1 = p = ] h ) 2 s - [ s c n s i 2 , j , i < 1 [ = s = l * - 1 ] n + { c [ d l i 0 o l h s c t o 1 , , u 1 e i [ h e c [ t n l l i m I n n d o l p + n . . [ & ] c d t c c I & ] ] 1 ] o o n { u u t s { n n ] [ t t , c _ h - - i l l 1 1 o d ) c ] - a l < l : s ) I [ n c t h , i _ l d l + e 1 n ] : { I n t ) { 算法思想:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。 ...

2015-05-14 · 3 min · 482 words · cubegao

Swift.二叉树的后序遍历

i e } m x p t o e r n f } f } t s / u / u i 递 n 非 1 2 入 n F o 归 c 递 . . 栈 c o n i } p p n 归 左 存 顺 v v v v s w } r u p f o o . 孩 在 序 p a a a a t h e n M o s s a 子 左 , o r r r r a i t d y s r t t p 和 孩 先 s c l u a T t o r O O p 右 子 右 t s c p r k e c i } } r t r O o e r r e 孩 或 再 O t u r e . u f e n i e r t t d d n 子 者 左 r a r e s a ! r l o e d u e e d 都 右 。 d c : : p s ( s r n N e = r r r ( 没 孩 按 e k = p t = c r p e i } i } e o r = n T T r 有 子 出 r T T e a u e r f f s d T r r o , , 栈 T = r r [ n c s r s e { e r n a a o 可 均 顺 r e e I d k t ? . c c S a i v v t 以 被 序 a [ e e n ( . a . a = u s u s o v l e e ! 访 访 来 v T N N t r i c l p r t r t l e r r . 问 问 e r o o ] o s k e p c ? a ? a u r { s s v 该 了 r e d d ( o E . f e u . c . c t s a a a 节 , s e e e ) t m l t n r r k l k i a l l l 点 才 a N ? ? ) p a d i . e . o l ( ( ) 能 l o t s = ( g a f a n ( r r 访 2 d = y t = s h p t p _ o o 问 ( e ! t t p p { o o 该 _ ? n { n a e ! e r t t 节 ] i i c ! n = n o ? ? 点 r ( l l k = d d o . . o ) . ( n ( t l r o & r n c i c : e i t & e i u l u f g : m l r r T t h c o ! { ! r , t T u v { . . e , r r e r l e & e ? L i e N n & e . a g f o ) n N r s h t d ) o i t t ) e d g ( ) ? e h ) , ? t ! _ ) . = v n = a : l n ) i [ i n I l o n ) u t t ] [ { I ( n p t r ] e ) ! { = n i l & & ( p r e = = = c u r ? . l e f t p r e = = = c u r ? . r i g h t ) ) { 算法思想:后序遍历:左子树 —> 右子树 —> 根结点 ...

2015-05-14 · 4 min · 676 words · cubegao

Swift.希尔排序

i c } m l p a o s r s f } t u S n F h c o e v v w } r u l s a a h e n l o r r i t d S r l u a o t s g e v w } g r t r ( a a h a n i t _ = p g r i p o S a l s n o n n = p i e v w } i / l : a h = u n > = i r i + t [ . l = 2 i I c 0 g < j e i } } j o n o a f e 1 n t u { p n = j l - ] n . s s = { ) t c i > [ l s s e b / o j e [ [ r g 2 u 0 t j j { e a n - ] a p t & t - k [ & g e = I { a m g n j p p s a t ] [ p ] - = j ] > { g s - = a s [ p [ j g t j ] a e > ] p m = ] p { 0 { 算法思想:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 ...

2015-05-11 · 2 min · 240 words · cubegao

Swift.圆圈中最后剩下的数字

题目描述:有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,求最后一个小朋友的编号 i c } m l p a o s r s f } t u F n F o c o r v f } v v w } r u 4 d a o a a h e n 5 e r r r r i t d S l l u a o e n i n i m e i } } i i } r t l t u u n C f e n f n i u e m i m d o n l d o t N s n s e u u m s e i n n i u . x n m C n i m e m x n i u o m = 0 a t s o u n C C d n m n ( . p = . u m d o { o + e d s _ [ . p = c n s e u u = x e [ { I . e 0 o t . x n n x 0 n n n n 1 u r t t 1 = ] : t d n = e - = = ] { ( t = m = = + I ( i o = n 0 n ) ) ! m v 1 1 u t = e 1 m , { ( s _ 1 a / . t 防 c m { : 止 o : 重 u i 复 n I n + t n d t e { ) x ) I n t { 算法思想:这是暴力解法,还有一种链表模拟会更好。 ...

2015-05-06 · 2 min · 275 words · cubegao

Swift.二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和整数,判断数组中是否含有该整数。 c } l a s s f } u S n o c l g } v v w } r u f u a a h e t i a r r i t i n r l u o d d r r c e i } } } r n ( e o o f e e n _ n t w l r l l { . u o n s s f n c r = = w [ r e c e r a : o n r e o o l u 0 n < o t i l { w s [ n f . = w u f e [ t a f ] r - + I l i n [ n n = = n > s r . c [ t e s c o t r 1 1 ] 0 t o l r o ] ! u ] u w , e . n e ] _ l c t = [ s o = c i e u - o : n i l { t 1 ] I { n - & > t & ) 1 i c o { l B > o = o l 0 { { ...

2015-04-22 · 2 min · 220 words · cubegao

Swift.替换空格

题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"We are happy.",则输出"We%20are%20happy."。 c } l a s s f } u S n o c l g } v f } l v v f } r u r u a o e a a o e t e a r r t r r r t i p r u o l d r n c i } l l l i } } r n a e u f e i i _ f e n c s t l i n s s , l { e . u l n c t t c c s S ( c r N n = I ) l l l l l l e l l t _ o n u s = u = n = i i i i i i i i r u m = l s d i = s s s s s s { s s i s n s { l . A e n t t t t t t t t n : t = " N c r x " [ I [ I [ I [ I g u o r s l n l n l n l n ( S > 0 " m u a = . " i d i d i d i d l t n y e s e s e s e s e i r 0 { + t < l n { t x t x t x t x s i = C e u I I I I t n e + h n m n - n - n - n - ) g l 1 a e d = d = d = d = ) s n r - r e e e e e u a a x 1 x 1 x 1 x 1 l c 1 t ] ] ] ] { l t e N e d = = = = S u r ( t m > ) " " " c r ( . 0 2 % i r r " " " n e e g 2 p v e e { a r t s i e n d g ( : ) " { x " , c o u n t : l e n ) 解题思路:如果从前往后处理,则空格后面所有的字符都后移若干位。所以从后向前处理会有更优解。这里直接新建了一个数组模拟操作的。 ...

2015-04-15 · 2 min · 398 words · cubegao

Swift.冒泡排序

i c } m l p a o s r s f } t u B n F u c o b v f } r u b s a o e n l o r r t d e r u a S t n i f } r t o ( u o n i r _ m i r o t s n n n S n j i } u o : = 0 f m l . i s u [ n . n n t I < u l n n i n n 0 m e u u o t . . s t m m n ] c . [ s s ) o < j t [ [ { u n ] e j j n . m + ] t c > p 1 o ] = [ { u n = I n u = t n t m n e t - s u n m ] i [ m u p - j s m { 1 + [ s 1 j [ { ] + j 1 ] { ] 算法思想:冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。 ...

2015-04-15 · 1 min · 196 words · cubegao