1 /* strcpy函数实现 拷贝字符串 */ 2 char* Strcpy(char* dst, char* src) 3 { 4 assert(dst != NULL && src != NULL); // 断言 dst和src不能为NULL 5 6 char* dst_address = dst; // 保存目的地址 7 8 while((*(dst++) = *(src++)) != '\0') 9 { 10 /* do nothing */ 11 } 12 13 return dst_address; // 返回目的地址 允许链式表达式 14 } 15 16 /* strncpy函数实现*/ 17 18 char* Strncpy(char* dst, const char* src, size_t num) 19 { 20 assert(dst != NULL && src != NULL); // 断言 dst和src不能为NULL 21 22 char* dst_address = dst; 23 24 size_t i = 0; // 控制复制的个数 25 while(i++ < num && (*dst++ = *src++) != '\0') 26 { 27 /* do nothing */ 28 } 29 30 if(*dst != '\0') // 字符必须以'\0'结尾 31 { 32 *dst = '\0'; 33 } 34 35 return dst_address; 36 } 37 38 size_t Strlen(const char *str) 39 { 40 assert(str != NULL); 41 42 int count = 0; 43 44 while(*str++ != '\0') 45 { 46 ++count; 47 } 48 49 return count; 50 } 51 52 void* Memcpy( void *dest, const void *src, size_t count ) 53 { 54 assert(dest != NULL && src != NULL); 55 56 char* _dest = (char*)dest; 57 char* _src = (char*)src; 58 59 while (count--) 60 { 61 *_dest++ = *_src++; 62 } 63 64 return dest; 65 } 66 67 void * Memmove ( void * destination, const void * source, size_t num ) 68 { 69 char* _dst = NULL; 70 char* _src = NULL; 71 72 if(destination <= source) 73 { 74 _dst = destination; 75 _src = source; 76 77 while (num--) 78 { 79 *_dst++ = *_src++; 80 } 81 } 82 else 83 { 84 _dst = destination; 85 _src = source; 86 87 _dst += num; 88 _src += num; 89 90 while (num--) 91 { 92 *--_dst = *--_src; 93 } 94 } 95 }
1 int FibonacciSequence(unsigned int n) 2 { 3 if(1 == n || 0 == n) 4 { 5 return n; 6 } 7 else 8 { 9 return FibonacciSequence(n-1)+FibonacciSequence(n-2); 10 } 11 }
1 int BinSearch(int* arr, int left, int right, int key) 2 { 3 if(!arr) 4 { 5 return -1; 6 } 7 8 while (left <= right) 9 { 10 int mid = left + ((right - left) >> 1); 11 12 if(arr[mid] < key) 13 { 14 left = mid + 1; 15 } 16 else if(arr[mid] > key) 17 { 18 right = mid - 1; 19 } 20 else 21 { 22 return mid; 23 } 24 } 25 return -1; 26 }
1 // 插入排序 2 void InsertionSort(int* arr, int len) 3 { 4 for(int j = 1; j < len; ++j) 5 { 6 int i = j - 1; 7 int key = arr[j]; 8 9 while(i >= 0 && a[i] > key) 10 { 11 a[i+1] = a[i]; 12 --i; 13 } 14 arr[i+1] = key; 15 } 16 }
1 int Partition(vector<int>& vec, int low, int up) 2 { 3 int pivot = vec[up]; 4 int i = low - 1; 5 6 for(int j = low; j < up; ++j) 7 { 8 if(vec[i] < pivot) 9 { 10 ++i; 11 std::swap(vec[i], vec[j]); 12 } 13 } 14 std::swap(vec[i+1], vec[up]); 15 16 return i+1; 17 } 18 19 void QuickSort(vector<int>& vec, int low, int up) 20 { 21 if(low < up) 22 { 23 int mid = Partition(vec, low, up); 24 25 QuickSort(vec, low, mid - 1); 26 QuickSort(vec, mid + 1, up); 27 } 28 } 29 30 void Sort(vector<int>& vec) 31 { 32 QuickSort(vec, 0, vec.size() - 1); 33 }
template <typename T> int BinSearch(std::vector<T>& array, T key) { int left = 0; int right = array.size(); while (left < right) { int mid = (left + right) >> 1; // 中点 if (array[mid] < key) { left = mid; } else if (key < array[mid]) { right = mid; } else { return mid; } } return -1; // 查找失败 }