
练习_C指针与排序算法
发布日期:2021-05-14 23:42:50
浏览次数:13
分类:精选文章
本文共 8220 字,大约阅读时间需要 27 分钟。
���������������������������
������1������������������������������������������������32������������������������������4������
���������������������������������������������������������������������������32���������������������������������int*���������������4������������64������������������8������������������������������������������������������������������������
#include#include #include int main() { short *p_short = NULL; printf("size short=%d byte\n", sizeof(short), sizeof(p_short)); double *p_double = NULL; printf("size double=%d byte\n", sizeof(double), sizeof(p_double)); char *p_char = NULL; printf("size char=%d byte\n", sizeof(char), sizeof(p_char)); void *p_void = NULL; printf("size void=%d byte\n", sizeof(void), sizeof(p_void)); return 0;}
���������������
size short=2 bytesize double=8 bytesize char=1 bytesize void=4 byte
������2: ���������������������������������������1������������������������������
���������������������������
#include#include #include #include #define LEN 5// ������������������void input_random(int *arr, int len) { srand(time(0)); int *p = arr; for(; p < arr + len; p++) { *p = rand() % 100; }}// ���������������1������������void output(int *arr, int len) { for(int i = 0; i < len; i++) { arr[i] /= 10 + arr[i] % 10; }}// ������������void select_sort(int *arr, int len) { int pos, i; for(i = 0; i < len - 1; i++) { pos = i; for(int j = i + 1; j < len; j++) { if(arr[pos] > arr[j]) { pos = j; } } if(pos != i) { int temp = arr[i]; arr[i] = arr[pos]; arr[pos] = temp; } }}// ���������int main() { int arr[LEN] = {0}; input_random(arr, LEN); printf("������������: "); for(int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } printf("\n"); // ���������1 output(arr, LEN); printf("���1������������������: "); for(int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } printf("\n"); sleep(1); // ������ select_sort(arr, LEN); printf("���������������: "); for(int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } return 0;}
���������������
������������: 37 14 42 18 53���1������������������: 49 15 76 23 30���������������: 15 23 30 42 49
������3������������������������������������������������
���������������������������������
#include#include #include #define LEN 90000// ������������������������void init(int *arr, int len) { srand(time(0)); for(int i = 0; i < len; i++) { arr[i] = rand() % 1000; }}// ������������void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp;}// ������������void select_sort(int *arr, int len) { int i, j, pos; for(i = 0; i < len; i++) { pos = i; for(j = i + 1; j < len; j++) { if(arr[pos] > arr[j]) { pos = j; } } if(pos != i) { swap(arr + i, arr + pos); } }}// ���������void bubble_sort(int *arr, int len) { int n = len; for(int i = 0; i < n; i++) { for(int j = 0; j < n - i - 1; j++) { if(arr[j] > arr[j + 1]) { swap(arr + j, arr + j + 1); } } }}// ������������void insert_sort(int *arr, int len) { for(int i = 1; i < len; i++) { int value = arr[i]; int j = i - 1; while(j >= 0 && value > arr[j]) { arr[j] = arr[j + 1]; j--; } arr[j + 1] = value; }}// ������������void quick_sort(int *arr, int left, int right) { if(left >= right) return; int pivot = arr[left]; int left_ptr = left, right_ptr = right; while(left_ptr < right_ptr && arr[left_ptr] <= pivot) { left_ptr++; } while(right_ptr > left_ptr && arr[right_ptr] > pivot) { right_ptr--; } swap(arr + left, arr + pivot); quick_sort(arr, left, left_ptr - 1); quick_sort(arr, left_ptr + 1, right);}// ������������������������int test_sort(int *arr, int len, void (*sort_func)(int *, int)) { int start = 0; int end = len - 1; int start_time, end_time; srand(time(0)); init(arr, len); // ��������������� clock_t begin = clock(); sort_func(arr, len); clock_t end = clock(); int time_diff = end - begin; // ������������������������������ for(int i = 0; i < len; i++) { arr[i] = 0; } init(arr, len); return (int)time_diff / 1000;}int main() { // ������������������������ int *arr = (int *)malloc(LEN * sizeof(int)); init(arr, LEN); int select_time = test_sort(arr, LEN, select_sort); printf("������������: %dms\n", select_time); // ��������������������� free(arr); arr = (int *)malloc(LEN * sizeof(int)); init(arr, LEN); int bubble_time = test_sort(arr, LEN, bubble_sort); printf("���������: %dms\n", bubble_time); // ������������������������ free(arr); arr = (int *)malloc(LEN * sizeof(int)); init(arr, LEN); int insert_time = test_sort(arr, LEN, insert_sort); printf("������������: %dms\n", insert_time); free(arr); return 0;}
��������������� ������������: 22715ms
���������: 73966ms ������������: 17577ms������4������������������������������������������������������������
���������������������������������������
#include#include #include #include #define LEN 5// ���������������������void init(int *arr, int len) { srand(time(0)); for(int i = 0; i < len; i++) { arr[i] = rand() % 1000; }}// ������������������������void quick_sort1(int *arr, int left, int right) { if(left >= right) return; int pivot = arr[left]; int left_ptr = left; int right_ptr = right; while (arr[left_ptr] <= pivot && left_ptr < right_ptr) { left_ptr++; } while (arr[right_ptr] > pivot && right_ptr > left_ptr) { right_ptr--; } swap(arr + left, arr + pivot); quick_sort1(arr, left, left_ptr - 1); quick_sort1(arr, left_ptr + 1, right);}// ���������������������������void quick_sort2(int *arr, int start, int end) { if(start >= end) return; int pivot = *(arr + start); int left_ptr = start; int right_ptr = end; while (arr[left_ptr] < pivot && left_ptr < right_ptr) { left_ptr++; } while (arr[right_ptr] > pivot && right_ptr > start) { right_ptr--; } swap(arr + start, arr + right_ptr); quick_sort2(arr, start, right_ptr - 1); quick_sort2(arr, right_ptr + 1, end);}// ������������������int test_sort(int *arr, int len, void (*sort_func)(int *, int, int)) { srand(time(0)); init(arr, len); clock_t begin = clock(); sort_func(arr, 0, len - 1); clock_t end = clock(); return (end - begin) / 1000;}int main() { // ��������������� int arr[LEN] = {0}; init(arr, LEN); printf("������������: "); for(int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } printf("\n"); // ������������������������ int single_time = test_sort(arr, LEN, quick_sort1); printf("������������������������: %dms\n", single_time); // ������������������������������ for(int i = 0; i < LEN; i++) { arr[i] = 0; } init(arr, LEN); printf("���������������: "); for(int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } printf("\n"); // ��������������������������� int double_time = test_sort(arr, LEN, quick_sort2); printf("���������������������������: %dms\n", double_time); return 0;}
���������������
������������: 970 371 445 382 803������������������������: 0���������������: 970 371 445 382 803���������������������������: 0
������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月20日 14时12分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OO_Unit2 多线程电梯总结
2021-05-09
04_Mysql配置文件(重要参数)
2021-05-09
python 序列化及其相关模块(json,pickle,shelve,xml)详解
2021-05-09
JavaSE总结
2021-05-09
手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
2021-05-09
Python IO编程
2021-05-09
CSS入门总结
2021-05-09
使用 TortoiseGit 时,报 Access denied 错误
2021-05-09
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2021-05-09
[系列] Go gRPC 调试工具
2021-05-09
django-表单之模型表单渲染(六)
2021-05-09
c++之程序流程控制
2021-05-09
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2021-05-09
有道云笔记 同步到我的博客园
2021-05-09
李笑来必读书籍整理
2021-05-09
http头部 Expect
2021-05-09
Hadoop(十六)之使用Combiner优化MapReduce
2021-05-09