#include #include #include //簡單c\c++演算法整理
//1.實現乙個演算法找到陣列中第二大的數
int findsec( int *p, int len )
}return secv;
}//2.實現strcpy.
char* mystrcpy( char *pdest, const char *psrc )
if( pdest == psrc )
char *piter = pdest;
while( ( *piter++=*psrc++ ) !='\0' );
return pdest;
}
//3.實現strcat.
char* mystrcat( char *pdest, const char *psrc )
char *piter = pdest + strlen( pdest );
while( ( *piter++=*psrc++ ) != '\0' );
return pdest;
}
//4.不使用第三個變數交換兩個數的值
void swapa( int &a, int &b )
a = a + b;
b = a - b;
a = a - b;
} void swapb( unsigned int &a, unsigned int &b )
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
語言中字串轉數字的方法是什麼( atoi ),請實現它
int myatoi( const char *pstring )
return value;
}
//6.實現乙個將字串逆序的方法
char* myinverted( char *pdest )
return pdest;
}
//7.實現乙個將字串中所有字母轉換為大寫的方法
char* myupper( char *pdest )
*i -= 'a' - 'a';
} return pdest;
}
//8.已知乙個陣列已經降序排序請用二分查字法找到其中的某個元素找到返回索引否則返回-1
int binarysearch( int *parray, int count, int value )
else if( value > parray[ mid ] )
else
} return -1;
}
struct node
;//9.刪除鍊錶中值為value的所有元素( [head]->[node1]->[node2]->...[noden] )
void deletefromlist( node *phead, int value )
else
}}
//10.在鍊錶index位置插入新的值為value的元素
void insertfromlist( node *phead, int index, int value )
//11.將鍊錶逆序
node* invertedfromlist( node *phead )
phead->mpnext = nullptr;//c->b->a->null
return pprev; //return c( new head )
}
//12.判斷x年x月x日是這年的第幾天
int getday( int year, int month, int day )
;
if( ( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 ) )
int days = 0;
for( int i = 1; i < month; ++i )
days += day;
return days;
}//13.求斐波拉契數列第n項
int getfibonacci1( int n )
if( 3 == n )
int a = 2;
int b = 3;
int c = 5;
for( int i = 0; i < n - 4; ++i )
return c;}
//14.遞迴求斐波拉契數列數列第n項
int getfibonacci2( int n )
return getfibonacci2( n - 1 ) + getfibonacci2( n - 2 );
}//15.實現乙個產生[n-m]區間數字的隨機方法
int getrandomrange( int n, int m )
if( n > m )
return n + ( rand() % ( m - n + 1 ) );}
//16.實現乙個產生[0~1]之間的隨機浮點數
double getrandomrange()
//17.實現乙個列印出1-1000之間的所有素數的方法
void printfprime()
} if( b )
}} //18.已知z = x + y 其中 z, x, y 均為無符號int型 定義乙個巨集判斷z是否已經越界
#define is_over_flow( z, x, y ) ( z < ( ( x ) < ( y ) ? ( y ) : ( x ) ) )
//19.請用棧實現佇列
int queuepop( std::stack< int > &stacka )
const int top = stackb.top();
stackb.pop();
while( false == stackb.empty() )
return top;}
//20.已知x班x成績0-100分編寫乙個方法實現0-59列印不合格,60-69列印合格,70-79列印良好,80-100列印優秀
//不能使用if,:?,switch
void printscore( int score )
; printf( "%s\n", pstring[ score / 10 ] );
}//21.實現strncpy
char *mystrncpy( char *pdest, const char *psrc, int count )
if( count <= 0 )
char *pstart = pdest;
while( ( count-- ) > 0 && ( *pstart++=*psrc++ ) );
*pstart = '\0';
return pdest;
} 語言中數字轉字串的方法是什麼?(itoa)請實現他
char* myitoa( char *pdest, int val, int radix )
; int count = 0;
dowhile( val );
if( isminu )
pdest[ count + 1 ] = '\0';
} else
pdest[ count ] = '\0';
} return pdest;
}//23.如何判斷鍊錶是否有環
bool isloop( node *phead )
} return false;
}//24.統計出乙個字串每種字母出現的次數要求時間複雜度為o(n)
void countletter( const char *psrc )
; for( ; *psrc !='\0'; ++psrc )
++count[ c ];
}} //25.選擇排序的思想是什麼?( 每次找到最大或最小的值放在陣列的低位上 )請實現它
void selectsort( int *parray, int count )
} //將找到最小元素放在陣列低位上面
const int temp = parray[ i ];
parray[ i ] = minvalue;
parray[ minindex ] = temp; }}
//26.氣泡排序的思想是什麼?(公升序排序中越小的數往低位走,越大的數往高位走,每次與相鄰元素比較導致的特點)請實現它
void bubblesort( int *parray, int count )
} }}
//27.已知兩個陣列有序實現乙個方法將他們合併後任然有序
void mergesort( int *pmerge, int *p1, int p1len, int *p2, int p2len )
else
}while( i < p1len )
while( j < p2len )
}
常用簡單演算法
氣泡排序,外迴圈控制輪數,內迴圈比較大小 for int i 0 ia j 1 for int x 0 xs new hashset hashset用來去掉重複 for object o array 現在的集合s中無重複的包含array中的所有元素 object obj s.toarray 把集合s...
C 常用查詢演算法總結(二)
查詢是在大量的資訊中尋找乙個特定的資訊元素,在計算機應用中,查詢是常用的基本運算,例如編譯程式中符號表的查詢,欄位的查詢,等等。1 插值查詢 在介紹插值查詢之前,首先考慮乙個新問題,為什麼上述演算法一定要是折半,而不是折四分之一或者折更多呢?同樣的,比如要在取值範圍1 10000 之間 100 個元...
簡單演算法總結
氣泡排序法 int arr new int 10 int max arr 0 for int i 0 iarr k 1 system.out.println system.out.println arrays.tostring arr 陣列元素中的最大值放在陣列最後一位的後面 int arr new...