冒泡排序vs qsort
memcpy vs strcpy
冒泡排序:
for(i=0; i < n;i++)
for(j=i+1; j< n;j++)
....
<stblib.h>
C 库函数 void qsort(void *base, size_t n_items, size_t size, int (*compar)(const void *, const void*)) 对数组进行排序
//复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。 //memcpy则是根据其第3个参数决定复制的长度。
char *strcpy(char* dest, const char *src) void *memcpy(void *destin, void *source, unsigned n);
#include <stdio.h> #include <string.h> #include <math.h> //qsort 排序法 #if 0 int cmp(const void* a, const void *b) { return strcmp((const char *)a, (const char *)b); } int main(void) { int i = 0; int size = 0; scanf("%d", &size); char arr[size][101]; //动态初始化,数组大小 while(EOF != scanf("%s", &arr[i++][0])) { } qsort(&arr[0], size, 101, cmp); for(i=0;i<size;i++) { printf("%s\n", &arr[i][0]); } return 0; } #endif //冒泡排序法: #include <stdio.h> #include <string.h> int main() { int n; scanf("%d", &n); char strings[n][101]; for (int i = 0; i < n; i++) { scanf("%s", strings[i]); } //复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。 //memcpy则是根据其第3个参数决定复制的长度。 char temp[101] = {'\0'}; for(int i = 0; i < n-1; i++) { for(int j = i+1; j < n; j++) { if (strcmp(strings[i], strings[j]) > 0) { memcpy(temp, strings[i], 101); //可以用char *strcpy(char* dest, const char *src) memcpy(strings[i], strings[j], 101); //void *memcpy(void *destin, void *source, unsigned n); memcpy(strings[j], temp, 101); } } } for (int i = 0; i < n; i++) { printf("%s\n", strings[i]); } return 0; }