目前分類:C++的世界 (22)

瀏覽方式: 標題列表 簡短摘要

首先我一定要提醒大家一件事情:謝爾排序法最一開始是用來改良「插入排序法」的,所以裡面的觀念不是SWAP,而是「插入」。會這樣寫一個前提的原因,是因為我在上課的時候,某個老師將「插入」這個動作誤植為「交換」,所以讓很多人一頭霧水。說真的,不是我偏,但身為一個補習班老師,你就不能講得正確一點嗎!?Doth thou monther know you were such idot? (#註1)

謝爾貝殼排序法要先找到級距(gap),最簡單的級距就是把陣列大小/2。相同級距的值作為一個位元組進行插入排序,結束之後級距/2進入迴圈,直到級距等於1 為止。

 

#include <iostream>
#include <time.h>

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

簡單說就是第一次找到最小的放到第一個元素位置,第二次找到第二小的放到第二個元素位置......

BIG OH大約是.... n+n-1+n-2+...+2 = ((n-2+1)n)/2 = ((n-1)n)/2
因此約等於O(n2

為什麼不做到最後一個?當然是因為沒有必要。

這樣解釋吧...,當我們使用兩個迴圈結構進行排除與搜尋的時候,開始當然都是從0開始,第二層的結束邊界也沒有問題,一定是做到完才有辦法每個元素都抓到;可是第一個迴圈呢?第一個迴圈當然跑到邊界極限的「前一個」就好。

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

好,細部分解完快速排序之後,讓我們依照由左到右、由小到大的順序,再玩一次快速排序。

這一次,我們要用最簡短的方式試看看

 

 

#include <iostream>

文章標籤

archerdevil 發表在 痞客邦 留言(1) 人氣()

進入快序排序法之後,其實就很考驗邏輯思考,所以其實我很少用快速排序或者是合併排序法。理由很簡單,寫起來很麻煩很囉唆,一不小心就會錯很大。

不過該寫還是要寫,該複習還是要複習,所以今天來玩所謂的不穩定排序法:快速排序。

快速排序的動作如下

1. 決定一個基準點(中間、左邊、或者右邊)

2.假設你決定基準點在左邊的話,那用 i 指標從基準點後一位開始找,找到比基準值大的數值停下

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

總覺得今天狀況不是很好,腦子不是很清楚,一個選擇排序寫好久,自以為邏輯對,結果把自己繞到迷宮理去了XDD

所謂的選擇排序,就是當你要由小到大排序的時候,先找到最小的紀錄起來,然後與第一個位置交換。

比如說當你今天有意個array{5,4,3,2,1},你打算由小到大重新排列

那第一輪過後一定是{1,4,3,2,5}

接下來{1,2,3,4,5}

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

泡泡排序玩過之後,為什麼會有本篇「之二」誕生?

很簡單,因為這一次要玩的,是降低運算次數。為什麼要降低運算次數?

很簡單,假設我們有一個陣列大小為三的陣列arr[3]={A, B, C}

如果不降低次數的話,使用兩個迴圈,總次數為:(n-1)(n-1) = 2*2 = 4次 //不要忘記統統從零開始

for(int i= 0; i<n-1; i++ )

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

雖然很簡單但還是要複習一下的基礎排序法之一:泡泡排序法

這大概是所有學寫程式的人一定會遇到的問題。這個問題練習了兩個主題,一個是基礎排序,另外一個是兩值交換。兩值交換有好幾種方法,一種是多增加一個變數,用三個空間做兩個值的互換,另外一種是只能用在數字上:B=A+B, A=B-A, B=B-A。這種方法可以在不增加變數空間佔用的狀況下實現兩個數值的交換>

範例:
int A = 9;

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

昨天寫了陣列與一般堆疊,講到堆疊當然會想到佇列,所以今天來玩一般佇列。

一般佇列當然是先進先出,也就是說從嘴巴吃進去從屁股拉出來,所以會有top當作屁股、rear當作嘴巴,放置item一定都從嘴巴,刪除一定都從屁股。

需要寫到的當然會有create功能(用來初始化佇列),isempty、isfull(用來判斷是否空佇列、是否有空間可以放入),add功能(放入)、以及del(刪除)功能。其實一般佇列應該還要寫一個釋放空間功能,因為佇列的存入一定是從rear,一般佇列並不像是環狀佇列一樣頭尾銜接,所以如果沒有釋放空間功能的話,當rear的位置在陣列的最尾端時,不管陣列中有沒有空間都是無法繼續放入元素的。

 

#include <iostream>

文章標籤

archerdevil 發表在 痞客邦 留言(1) 人氣()

上一次用鍊結串列做過,不過說到堆疊,C語言最好還是用一般陣列寫

有鑑於此,所以這次我用陣列玩看看。

 

首先,要說明一下。堆疊的建構有幾個一定要出現的,比如說create功能(初始化堆疊)、push功能(置入)、pop功能(取出/刪除)、以及很重要的IsEmpty(判斷是否為空堆疊,沒有這個pop會出錯);除了這四個以外,如果用陣列來做,就一定要考慮到陣列空間是否已滿。如果用鍊結串列來做,因為空間是「需要才加上去」,空間配置是可動的,所以IsFull這個功能可以不要沒關係,但如果是陣列,沒有這個功能,恐怕就會有溢出問題。

 

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

不管是系統分析、資訊管理、還是程式語言,統統都會講到OO(物件導向,Object Oriented)概念,而且被提及得非常頻繁。究竟什麼是物件導向?這大概可以分成兩個層面來說:OOA(物件導向分析)、以及OOD(物件導向設計)。

 

所謂的OOA,是把整個需求拆解成幾個甚至於許多個細部需求,這些細部需求組合起來必然為委案者的原始需求,然後根據這些被簡化了的細部需求瞭解各種功能物件,從而在分析階段清楚的辨明整個需求的面貌。

OOD則是建立在OOA前提之上;根據物件導向分析結果,分別同步或依序設計、撰寫、測試、組裝所有的功能元件,以一種類似於模組化設計生產的方式,將需求實質化。

 

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include<iostream>
using namespace std;

struct NODE//node裡面應該會有一個data,一條鍊子
{
    int data;

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include <iostream>
using namespace std;

const int _1st=1;
const int _2nd=3;
const int _3rd=1;

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include <iostream>
using namespace std;

const int row=2;
const int col=3;

void matrix_trans(int [row][col],int [col][row]);

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include<iostream>
using namespace std;

const int row = 3;
const int col = 3;// 定義global 變數;

void addMatrix(int [row][col],int [row][col],int [row][col]);//定義「矩陣相加」函數

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

證明費氏數列 f= (a- bi)/根號5,其中ai = (1+根號5)/2, bi = (1-根號5)/2

首先,已知 fn=fn-1+fn-2

設fn=rn,則 fn - fn-1 - fn-2 = 0 可轉為rn-rn-1-rn-2=0

同除以rn-2得到 r- r - 1

r=(1+根號5)/2或(1-根號5)/2

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

證明當f(n)=a0n0+a1n1+...+amnm=Big O(nm)

根據原式可知,f(n) = sigema(i 從0到m)的aknk 

=sigema (i 從0到m)(|a0|n0+|a1|n1+...+|am|nm)

=sigema (i 從0到m)nm(|a0|n-m+|a1|nm-1+...+|am|n0)

=nm *sigema (i 從0到m)|ai|*1

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include <iostream>

using namespace std;

int Ack(int m, int n)
{
   if (m==0)

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

#include <iostream>
using namespace std;

#define N 20

int F(int n)
{

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

設AVL樹高為h,最少總節點數量為N
當h=1的時候,N一定是1(AVL樹不為空樹,只有根節點)
設 1. 左子樹的高hL=h-1, 右子樹的高hR=hL-1==h-2
設 2. 最小總節點數量N為左子樹最小節點數量nL+右子樹最小節點數量nR+根節點,亦即N=nL+nR+1

文章標籤

archerdevil 發表在 痞客邦 留言(0) 人氣()

好久沒有上來了XD

 

回台灣之後,acer TM 5520終於不堪我的使用,壞掉了。據查,原因是因為兩顆螺柱脫離了主機板,導致莫名其妙的無法開機狀態。因為這個原因,所以我把電腦拿去Acer維修,請他幫我接合那兩個螺柱,但沒想到...,他居然要跟我收8900!

誰會修阿!

所以後來買了Toshiba的z830。

archerdevil 發表在 痞客邦 留言(0) 人氣()

1 2