char *strcpy(char *strDest, const char *strSrc)
{ assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0')
return address ;
} |
2、memset:
void * Memset(void* buffer, int c, int count)
{ char* pvTo=(char*)buffer; assert(buffer != NULL); while(count-->0) *pvTo++=(char)c; return buffer; }
3、memcpy——不考虑数据区重叠
void
*
__cdecl memcpy (
void
*
dst,
const
void
*
src, size_t count )
{
}
4、memmove——考虑数据区重叠
void
*
memmove(
void
*
dest,
const
void
*
src,size_t count)
{
}
|
5、快速排序: #include<iostream> usingnamespace std;
int cmp = 0; // 总共执行比较操作的次数 int swp = 0; // 总共执行交换操作的次数
int partition(int a[], int p, int r) { int x = a[r]; int i = p-1; for(int j=p; j<=r-1; j++) { cmp++; if( a[j] < x ) { i++; swp++; swap(a[i], a[j]); // 小于x的放到前面,不稳定 } } i++; swp++; swap(a[i], a[r]); return i; }
void quickSort(int a[], int p, int r) { if( p < r ) { int q = partition(a, p, r); quickSort(a, p, q-1); quickSort(a, q+1, r); } }
int main() { int a[] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
quickSort(a, 0, sizeof(a)/sizeof(a[0])-1);
cout << "总共进行比较 " << cmp << " 次,总共进行交换 " << swp << " 次" << endl;
for(int i=0; i<sizeof(a)/sizeof(a[0]); i++) { cout << a[i] << " "; } cout << endl;
return 0; } 6、堆排序 #include<iostream> #include<ctime> usingnamespace std;
// 注意父子的计算方式。节点编号从0开始。 inlineint parent(constint x) { return ((x-1)/2); } inlineint left(constint x) { return (2*x+1); } inlineint right(constint x) { return (2*x+2); }
int cmp = 0; // 总共执行比较操作的次数 int swp = 0; // 总共执行交换操作的次数
// 调整以i为根的子树,使之成为最大堆,size为堆的大小 void maxHeapify(int a[], int size, int i) { cmp +=2; swp++;
int l = left(i); int r = right(i); int largest = i; // 最大堆的根
if( (l < size) && (a[l] > a[i]) ) largest = l; if( (r < size) && (a[r] > a[largest]) ) largest = r; if( largest != i ) { swap(a[i], a[largest]); // 三个节点中较大者成为根 maxHeapify(a, size, largest); // 可能破坏了堆性质,重新调整 } }
void buildMaxHeap(int a[], int size) // 建堆 { for(int i = (size-1)/2; i>=0; i--) { maxHeapify(a, size, i); } }
void heapSort(int a[], int size) // 堆排序,(n-1)*O(lgn) = O(nlgn) { swp++;
buildMaxHeap(a, size); for(int i=size-1; i>0; i--) // 重复n-1次 { swap(a[0], a[i]); size--; maxHeapify(a, size, 0); // 每次调整,花费为O(lgn) } }
int main() { int a[] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
heapSort(a, sizeof(a)/sizeof(a[0]));
cout << "总共进行比较 " << cmp << " 次,总共进行交换 " << swp << " 次" << endl;
for(int i=0; i<sizeof(a)/sizeof(a[0]); i++) { cout << a[i] << " "; } cout << endl;
return 0; } |