方法一: 當A B 此兩數要找最大公數,最簡單最直覺得就是,哪一個數比較小,
就開始一直遞減找下去
例一: 40,6所以6比較小 ,然後用6下去除兩數看是否整除,不行則用5 然後4 .....直到2
方法二:輾轉相除法!!!
因為會一直取另外一個數去%另外一數,直到另一數為0
所以只要兩數都大於0則一直轉下去!!!
程式碼:
#include <stdio.h>
#include <stdlib.h>
int gcd (int a ,int b);
int gcd2 (int a, int b);
int main()
{
int answer,answer2;
int num1= 189;
int num2= 9;
answer= gcd(num1,num2);
answer2= gcd2(num1,num2);
printf("answer: %d \r\n",answer);
printf("answer2: %d \r\n",answer2);
return 0;
}
int gcd (int a ,int b)
{
int d,temp;
if(a >b)
temp=b;
else
temp=a;
for(d=temp;!(a%d==0 && b%d==0);d--);
return d;
}
int gcd2 (int a, int b)
{
while(a>0 && b>0)
{
if(a>b)
a=a%b;
else
b=b%a;
}
if(a==0)
return b;
else
return a;
}
2013年10月16日 星期三
2013年10月9日 星期三
Binary Search using C
今天去面試考了binary Search.....
寫了一個recursive version
但是有些語法 錯誤,今天用電腦重新又寫了一個。
intput : array, valuern
output : index (the data index of the array)
note: if not found return -1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int BinarySearch (int arr[],int value,int s,int l);
int main (void)
{
int array1[] ={-5,1,5,30,70,90,98,99};
int arraysize = sizeof(array1)/sizeof(int);
int findvalue = 99;
int findindex = -1;
int i =0;
findindex = BinarySearch(array1,findvalue,0,arraysize-1);
printf("\nSearh index is:");
printf("%d\n",findindex);
return 0;
}
int BinarySearch (int arr[],int value,int s,int l)
{
if(s<=l)
{
int i = floor((s+l)/2);
if(arr[i] == value)
return i;
else
if(arr[i]>value)
return BinarySearch(arr,value,0,i-1);
else
return BinarySearch(arr,value,i+1,l);
}
return -1;
}
以下是Iterative version
int BinarySearchI(int arr[],int value, int l)
{
int s=0;
while(s<=l)
{
int i = floor((s+l)/2);
if(arr[i] == value)
return i;
else
if(arr[i]>value)
l=i-1;
else
s=i+1;
}
return 0;// not found
}
寫了一個recursive version
但是有些語法 錯誤,今天用電腦重新又寫了一個。
intput : array, valuern
output : index (the data index of the array)
note: if not found return -1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int BinarySearch (int arr[],int value,int s,int l);
int main (void)
{
int array1[] ={-5,1,5,30,70,90,98,99};
int arraysize = sizeof(array1)/sizeof(int);
int findvalue = 99;
int findindex = -1;
int i =0;
findindex = BinarySearch(array1,findvalue,0,arraysize-1);
printf("\nSearh index is:");
printf("%d\n",findindex);
return 0;
}
int BinarySearch (int arr[],int value,int s,int l)
{
if(s<=l)
{
int i = floor((s+l)/2);
if(arr[i] == value)
return i;
else
if(arr[i]>value)
return BinarySearch(arr,value,0,i-1);
else
return BinarySearch(arr,value,i+1,l);
}
return -1;
}
以下是Iterative version
int BinarySearchI(int arr[],int value, int l)
{
int s=0;
while(s<=l)
{
int i = floor((s+l)/2);
if(arr[i] == value)
return i;
else
if(arr[i]>value)
l=i-1;
else
s=i+1;
}
return 0;// not found
}
2013年10月3日 星期四
轉置矩陣 - C array transpose
array transpose
KEY:
1.要多再用一個ARRAY
2. ROW 和 COL 要互換 (因為如果不是方陣的話。)
#include <stdio.h>
#include <stdlib.h>
#define ROW 4
#define COL 5
int main (void)
{
int i , j;
int A[ROW][COL];
int B[COL][ROW];
for ( i=0;i<ROW;i++)
for (j=0;j<COL;j++)
A[i][j]= (rand()%8)+1;
// print the result
for ( i=0;i<ROW;i++)
{
for (j=0;j<COL;j++)
printf("%d ",A[i][j]);
printf("\n");
}
for( i=0;i<COL;i++)
{
for(j=0;j<ROW;j++)
B[i][j] = A[j][i];
}
printf("After reverse \r\n");
for ( i=0;i<COL;i++)
{
for (j=0;j<ROW;j++)
printf("%d ",B[i][j]);
printf("\n");
}
// system("pause");
return 0;
}
2013年9月5日 星期四
alignment
一開始本來再查甚麼是ABI (Appilcation Binary Interface)
其中有一點是
ABIs cover details such as
- the sizes, layout, and alignment of data types
有點忘記甚麼叫做alignment所以就花了 一點時間去查一下
那為什麼會有alignment這個名詞出現呢?
因為變數再宣告的時候,會配置給他記憶體,但每種大小不一樣,比如說long 64 bit ,int 32bit , cahr 8bit,此時就產生了一個問題,那要怎麼樣塞進記憶體之後要取資料比較方便呢?
一般來說再32-bit的架構上我們一次會讀4個byte的資料出來,所以如果此時資料沒有放好我們會讀很多次才會讀到我們想要的資料,所以就有alignment這個方法的出現。
所以我就仿造我查到的網誌真的動手去試試看
int main (void)
{
struct ali
{
char x; //1byte
int y;//4bytes
short int z;//2 bytes
}align_ex;
printf("align_ex size is %d\n",sizeof(align_ex));
printf("x size is %d\n",sizeof(align_ex.x));
printf("y size is %d\n",sizeof(align_ex.y));
printf("z size is %d\n",sizeof(align_ex.z));
printf("address of test is %p\n", &align_ex);
printf("address of x is %p\n", &align_ex.x);
printf("address of y is %p\n", &align_ex.y);
printf("address of z is %p\n", &align_ex.z);
}
真的會幫我配置好,只不過會有內部碎裂,看到的專業名詞叫做
:"padding"(幫你insert 空的資料 讓data可以對齊)
如果我改成以下 就會有不一樣的結果,或者順序也會影響記憶體配置
int main (void)
{
struct ali
{
char x;//1byte
char y;//1bytes
int z;//4 bytes
}align_ex;
printf("align_ex size is %d\n",sizeof(align_ex));
printf("x size is %d\n",sizeof(align_ex.x));
printf("y size is %d\n",sizeof(align_ex.y));
printf("z size is %d\n",sizeof(align_ex.z));
printf("address of test is %p\n", &align_ex);
printf("address of x is %p\n", &align_ex.x);
printf("address of y is %p\n", &align_ex.y);
printf("address of z is %p\n", &align_ex.z);
}
reference :
1.http://kezeodsnx.pixnet.net/blog/post/27585076-data-structure%E7%9A%84%E5%B0%8D%E9%BD%8A(alignment)
2. http://www.programmer-club.com.tw/ShowSameTitleN/c/38584.html
2013年6月27日 星期四
Insertion Sort (插入排序法)
(一) Concept:
將第 i 筆 record 插入到前面 (i-1)筆 已經sorting 之list中,形成 i 筆已經排序好的list ie...i=2 to n 共執行 n-1回合。
(二)example:{88,7,87,9,80,100,800,10,5}
(三)每回合變化
![](data:image/png;base64,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)
程式碼:
將第 i 筆 record 插入到前面 (i-1)筆 已經sorting 之list中,形成 i 筆已經排序好的list ie...i=2 to n 共執行 n-1回合。
(二)example:{88,7,87,9,80,100,800,10,5}
(三)每回合變化
程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main (void)
{
int k;
int a[] = {88,7,87,9,80,100,800,10,5}; //You change the data what you want to sort
int array_size = sizeof(a)/sizeof(int);
printf("start Insertion sort\n");
InsertionSort(a,array_size);
printf("Ans is:");
for(k = 0; k<array_size;k++) //print the result
printf("%d ",a[k]);
}
void InsertionSort(int data[],int array_size)
{
int i,j,index,q;
int counta = 0;
bool f;
for(i=1; i< (array_size); i++) //execute the n-1 times
{
index = data[i];
for(j=i;j>0&&data[j-1]>index;j--)//假如後者大於前者則對調
{
data[j] = data[j-1];
}
data[j] = index;
/*
// print the every pass
printf("pass%d ",i);
for(q=0;q<array_size;q++)
printf("%d ",data[q]);
printf("\n");*/
}
}
2013年6月25日 星期二
Selection sort (選擇排序法)
(一)key idea: 自 i+1 筆 到第 n 筆資料 挑出最小值然後和第i交換
(二)The example:{88,7,87,9,80,100,800,10,5}
(三)每回合變化
![](data:image/png;base64,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)
優點:
適合用在大型記錄之sorting,因為每回和頂多Swap 1次
程式碼
(二)The example:{88,7,87,9,80,100,800,10,5}
(三)每回合變化
優點:
適合用在大型記錄之sorting,因為每回和頂多Swap 1次
程式碼
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main (void)
{
int k;
int a[] = {88,7,87,9,80,100,800,10,5}; //You change the data what you want to sort
int array_size = sizeof(a)/sizeof(int);
printf("start selection sort\n");
SelectionSort(a,array_size);
printf("Ans is:");
for(k = 0; k<array_size;k++) //print the result
printf("%d ",a[k]);
}
void SelectionSort(int data[],int array_size)
{
int i,j,minmum,q;
int counta = 0;
bool f;
for(i=0; i< (array_size-1); i++) //execute the n-1 times
{
minmum = i;
for(j=i+1;j<array_size;j++) //找出目前最小值在哪裡 {
if(data[j]<data[minmum])
minmum = j;
}
if(minmum != i )//如果和之前位置一樣就不用交換
Swap(&data[i],&data[minmum]);
/* // print the every pass
printf("pass%d ",i);
for(q=0;q<array_size;q++)
printf("%d ",data[q]);
printf("\n");*/
}
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
2013年6月22日 星期六
Bubble Sort 泡沫排序法
1.Time complexity:
worst case: n*n
best cace :n
2.我一個flag 判斷如果此回合沒有執行 swap則表示sort完畢
code如下:
1.每回合執行如下所示:
![](data:image/png;base64,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)
2.但如果我拿掉if(!f) break 他會執行完n-1回合
![](data:image/png;base64,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)
這時候就知道演算法的強大了。
worst case: n*n
best cace :n
2.我一個flag 判斷如果此回合沒有執行 swap則表示sort完畢
code如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main (void)
{
int k;
int a[] = {88,7,87,9,80,100,800,300,400}; //You change the data what you want to sort
int array_size = sizeof(a)/sizeof(int);
printf("start bubble sort\n");
BubbleSort(a,array_size);
for(k = 0; k<array_size;k++) //print the result
printf("a = %d\n",a[k]);
}
void BubbleSort(int data[],int array_size)
{
int i,j,temp,q;
int counta = 0;
bool f;
for(i=0; i< (array_size-1); i++) //execute the n-1 times
{
f = false;
for(j=0;j<array_size-1-i;j++)
{
if(data[j]>data[j+1])
{
Swap(&data[j],&data[j+1]);
f = true;
}
counta++;
}
/*
printf("pass%d ",i);
for(q=0;q<array_size;q++)
printf("%d ",data[q]);
printf("\n");
*/
if(!f)break;
}
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
1.每回合執行如下所示:
2.但如果我拿掉if(!f) break 他會執行完n-1回合
這時候就知道演算法的強大了。
call by value VS call by address (傳值VS傳址)
call by value VS call by address
1.call by address
the result is :
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAAA/CAIAAADWsa7OAAAGt0lEQVR4nO2dW3bTSBCGtVF2wArYy7zO62zBG7BNQricAcIMvsS3wOQCWErCmQcljqzuLlW3pLZsf9+pw5Hl6rpJ+aMoikkGo/VgtB6O0+E4nV7dz6/vynaT231ui9xu7xe3T9vPOx+KtnTZj9+Pdptb8d3fLlt42Y3T5jcPLpvldr1lF4ZNrx+mV3abPFlxu2Tjjf33bCNf+/4w+v7w1Wb/luzblv2zD/bFYc3E/96MuYp0233ZLu9yO7+8O1/Z7fMqs9tSsNRqn0Js7bKPi6Zt/qtt+3v2syl7Djv7+bH48sk+LdYb+7xc54fgfJmer7LzVfZllX1ZZclGfKdX93/8+deLl68wDMOwtu1RfAej9fz67sXLVwkAAESg//UX4gsAEBvEFwBgBwxG61x/EV8AgHjk4tv/+mt2FSK+PYPGK3QFbzsvAECL5PccaopvC3VZ4ru2I5QBANAwj+I7Ws8Utx3My8xmVU++jJWFGPEFgH0iV96N+Mra2oj4Vl7Aeokvdx4AYC/pb4tvYuiavLy3jSajIL6VWcwg+lIBADqEKb5J6A/yXkrqtcS10Ov7BABAh/ASX1mU64uvPn7JE/EFgD3D67aDKY6yAlaKeHB8wQ0AYA/o+/zCzYpLSZNGr5QFpUZ5AWD/sN52aARZE1FMADhq+qO0JfG1wrUqAECSRBdfAABIkkfxTfujddifFwMAQAjP4suVLwBANLjtAACwA9p72gEAAJxYn/PlmYRo6OccfFCsz27Xz3ucp8euuu7OtOucP6a/dc+xiI/wF25Jlw55q+y2R82Qgw+KVXn1qeW8h3p6CE212vKu8uqpc/5olh+X+Jj/e/Fx9d+BHtsTX83JXUd8vYrZF3bV0Q4nqTkTip76VS7/XgHN2sNEKb7m4DYRXHNse78V3zp7BqXGrdtmfGsQfV+VrQl9yUtcO0uprWNR5lXW44t1OMJLr/mbC01n6xKv+Fb/ymY1eQPq1GRXeuqzyP7y8oDRVTp3C5f4CpMqvlX0ibkt4FWnK6zGv405VPaldK7sSyjb2q+QV1+SHv38Zf+A+cvtCM7K+MrIyrylUQTk9cKVN8zftbz3hL4eTTGdYyO+1nu+RYoTqTzYlUHM+cpL9B0JderzCr0EzMHMq5mVtR6z/sol5k5r2dbgmrzKerxwzU2uU56zq2ZXy0JhlXE0NciRlXl7tvPQNbf6lCJXppD9vVqu6dZFBuP1YLzuj7XiK+zUnHDKoxWwUF+nr7/mjKkzB01rvv4uz94TVofSu5q8+mK8kMPKdWri+B5f17ua464cUVjezb+lDS/MeSo9K1fJ/l4tawpTOneF/njdb1l829gW8KozcZy4vmdM230FzEFTvDWsvk6vSrxo6ngFzN8a31pYWPzKlr3ylpYE5N14ehUpvKx0cL0MqD+s365QEt9egaKba7/wVtv7rQTUmThOvuLO0obL2dzW9GUu8W1Ns9AaR65ZU79XJQFlC4V51ek1/8o4lXmF2WparswbMIemsA5BX7/QVFj9bffbIuaVLwAAtM5wnOa3feeILwBANIbjtPSoGQAAtM4A8QUAiM9gnOaG+AIAxGM4TnNDfAEA4jGcpLnNbxBfAIBYlMRXeP7uIDmSNvUwDYBImFe+5rPQOywvAhF67NoMhXqO4YgDdILXkzQ3xHdP4/vStXoAjpRceSuvfIs/niv/HNB3vwurf28b09/cluO7tmvG7xnIfSlDVe7XJNXUIztbh+DbF8CRMpxkuc1v7nf4eb4alHF8U3j1Uie+phdNkJpzltMpmw3ICwBbvJ5muS22xdf07D2RGIJVpOTviqOv0BpfKS6aXELxlX3p4ws7g4MIcZTzqUzkG1+YGwBs4Su+mp0aB+VXZk1x8dI15cLg+I0HEeIo51OZyDe+phcASJIkOZlmJ5PsZNKA+LbxhRoWp1dAju8K1Ub8mHMQ4lvrsSZqNm9SmJvcLMBRkCvvRnxdsiLIje8SIZSVorNVOFyhNClKlZjbQpCwFsydvkE0ceT5VMbRzFl2s/bl1S/AgXM6zXJbPl35HgZtf5EjIgBQi9NJekji63s52bX4AHAsnE7S00l6MkkXfLYDAEA03kzT02l6Ok2XiC8AQDTeTNPcEF8AgHicXWSILwBAbM4ustwO4xduAAD7wdksO5tlZxfZ8hbxBQCIxduLLDfEFwAgHrnycuULABCVd7Ps7Sx7O8tWiC8AQDTezbLcEF8AgHggvgAAO+D9/C43xBcAIB4f5ncf5tn7WXaJ+AIAROPDPMvt8kf583z5BC8AgJb4HzF0l2yuG9/IAAAAAElFTkSuQmCC)
我要把x , y 兩數交換,但似乎沒有達成我的需求 WHY?
當我執行到 int x =5 ,系統就會立刻分配記憶體空間給變數使用
所以每個變數都會有一個記憶體位址。
執行swap前
執行swap後
可以看出來他的確有把兩數交換,但他沒有真的把原始的位址傳入
所以call by vaule 只是把value複製給對方。
2.call by address:
the result is:
![](data:image/png;base64,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)
1.&:取值運算子 ---就是把變數的位址取出來
2.然而void.......(int *a, .....) 指標 a 指向 x
執行swap前
執行swap後
reference:http://wp.mlab.tw/?p=176
1.call by address
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x =5;
int y =30;
Swap(x,y);
printf("x:%d,y:%d",x,y);
}
void Swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
the result is :
我要把x , y 兩數交換,但似乎沒有達成我的需求 WHY?
當我執行到 int x =5 ,系統就會立刻分配記憶體空間給變數使用
所以每個變數都會有一個記憶體位址。
執行swap前
main 中的x
|
Main 中的y
|
Swap中的a
|
Swap中的b
|
|
Value
|
5
|
30
|
5
|
10
|
Mem_addr
|
0x7
|
0x8
|
0xFF
|
0xFE
|
執行swap後
main 中的x
|
Main 中的y
|
Swap中的a
|
Swap中的b
|
|
Value
|
5
|
30
|
10
|
5
|
Mem_addr
|
0x7
|
0x8
|
0xFF
|
0xFE
|
可以看出來他的確有把兩數交換,但他沒有真的把原始的位址傳入
所以call by vaule 只是把value複製給對方。
2.call by address:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x =5;
int y =30;
Swap(&x,&y);
printf("x:%d,y:%d",x,y);
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
the result is:
1.&:取值運算子 ---就是把變數的位址取出來
2.然而void.......(int *a, .....) 指標 a 指向 x
執行swap前
main 中的x
|
Main 中的y
|
Swap中的a
|
Swap中的b
|
|
Value
|
5
|
30
|
0x7
|
0x8
|
Mem_addr
|
0x7
|
0x8
|
0xFF
|
0xFE
|
執行swap後
main 中的x
|
Main 中的y
|
Swap中的a
|
Swap中的b
|
|
Value
|
30
|
5
|
0x7
|
0x8
|
Mem_addr
|
0x7
|
0x8
|
0xFF
|
0xFE
|
reference:http://wp.mlab.tw/?p=176
訂閱:
文章 (Atom)