醒了。
醒過來的時候,我發現自己不記得做了什麼夢。
其實這很正常。
這世界上誰敢說能夠很清楚的記得自己的夢呢?
archerdevil 發表在 痞客邦 留言(0) 人氣(40)
好吧!這一篇其實試看到某個孩子寫了白癡,不想吃昂貴的滷肉飯,就不要吃呀! 這篇文章所產生出來的。
我後來在後面留下了回應,大致內容如下:
archerdevil 發表在 痞客邦 留言(1) 人氣(72)
首先我一定要提醒大家一件事情:謝爾排序法最一開始是用來改良「插入排序法」的,所以裡面的觀念不是SWAP,而是「插入」。會這樣寫一個前提的原因,是因為我在上課的時候,某個老師將「插入」這個動作誤植為「交換」,所以讓很多人一頭霧水。說真的,不是我偏,但身為一個補習班老師,你就不能講得正確一點嗎!?Doth thou monther know you were such idot? (#註1)
謝爾貝殼排序法要先找到級距(gap),最簡單的級距就是把陣列大小/2。相同級距的值作為一個位元組進行插入排序,結束之後級距/2進入迴圈,直到級距等於1 為止。
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
#define SWAP(a,b){ int temp =a;a=b;b=temp;}
archerdevil 發表在 痞客邦 留言(0) 人氣(1,240)
簡單說就是第一次找到最小的放到第一個元素位置,第二次找到第二小的放到第二個元素位置......
BIG OH大約是.... n+n-1+n-2+...+2 = ((n-2+1)n)/2 = ((n-1)n)/2
因此約等於O(n2)
archerdevil 發表在 痞客邦 留言(0) 人氣(209)
好,細部分解完快速排序之後,讓我們依照由左到右、由小到大的順序,再玩一次快速排序。
這一次,我們要用最簡短的方式試看看
archerdevil 發表在 痞客邦 留言(1) 人氣(133)
進入快序排序法之後,其實就很考驗邏輯思考,所以其實我很少用快速排序或者是合併排序法。理由很簡單,寫起來很麻煩很囉唆,一不小心就會錯很大。
不過該寫還是要寫,該複習還是要複習,所以今天來玩所謂的不穩定排序法:快速排序。
快速排序的動作如下
1. 決定一個基準點(中間、左邊、或者右邊)
archerdevil 發表在 痞客邦 留言(0) 人氣(371)
總覺得今天狀況不是很好,腦子不是很清楚,一個選擇排序寫好久,自以為邏輯對,結果把自己繞到迷宮理去了XDD
所謂的選擇排序,就是當你要由小到大排序的時候,先找到最小的紀錄起來,然後與第一個位置交換。
比如說當你今天有意個array{5,4,3,2,1},你打算由小到大重新排列
那第一輪過後一定是{1,4,3,2,5}
archerdevil 發表在 痞客邦 留言(0) 人氣(4,833)
泡泡排序玩過之後,為什麼會有本篇「之二」誕生?
很簡單,因為這一次要玩的,是降低運算次數。為什麼要降低運算次數?
很簡單,假設我們有一個陣列大小為三的陣列arr[3]={A, B, C}
如果不降低次數的話,使用兩個迴圈,總次數為:(n-1)(n-1) = 2*2 = 4次 //不要忘記統統從零開始
archerdevil 發表在 痞客邦 留言(0) 人氣(685)
雖然很簡單但還是要複習一下的基礎排序法之一:泡泡排序法
這大概是所有學寫程式的人一定會遇到的問題。這個問題練習了兩個主題,一個是基礎排序,另外一個是兩值交換。兩值交換有好幾種方法,一種是多增加一個變數,用三個空間做兩個值的互換,另外一種是只能用在數字上:B=A+B, A=B-A, B=B-A。這種方法可以在不增加變數空間佔用的狀況下實現兩個數值的交換>
範例:
int A = 9;
archerdevil 發表在 痞客邦 留言(0) 人氣(3,807)
昨天寫了陣列與一般堆疊,講到堆疊當然會想到佇列,所以今天來玩一般佇列。
一般佇列當然是先進先出,也就是說從嘴巴吃進去從屁股拉出來,所以會有top當作屁股、rear當作嘴巴,放置item一定都從嘴巴,刪除一定都從屁股。
需要寫到的當然會有create功能(用來初始化佇列),isempty、isfull(用來判斷是否空佇列、是否有空間可以放入),add功能(放入)、以及del(刪除)功能。其實一般佇列應該還要寫一個釋放空間功能,因為佇列的存入一定是從rear,一般佇列並不像是環狀佇列一樣頭尾銜接,所以如果沒有釋放空間功能的話,當rear的位置在陣列的最尾端時,不管陣列中有沒有空間都是無法繼續放入元素的。
archerdevil 發表在 痞客邦 留言(1) 人氣(115)