简单的算法
2011-09-24 17:01
134 查看
一:8位倒置
二:将一个整数拆成一串连续的整数之和。
三:单链表的冒泡排序
x = (x & 0x55) << 1 | (x & 0xAA) >> 1; x = (x & 0x33) << 2 | (x & 0xCC) >> 2; x = x <<4 | x>>4;
二:将一个整数拆成一串连续的整数之和。
/* 此算法实现将一个整数拆成一串连续的整数之和。如:6可以拆分成:1+2+3. 微调的思想,不用等差列表求和的思想。 2011-9-24. */ #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char * argv[]) { int n = atoi(argv[1]); int left, right; int sum ; int count = 0; printf("n = %d\n",n ); if (n <= 0) return; sum = 1; for (right = left = 1; right <= (n + 1) /2; ) { if (sum > n) { sum -= left; left++; } else if (sum == n) { printf("start pos = %d, end pos = %d, total num = %d\n", left, right, right - left + 1); count++; sum -= left; left++; } else { right++; sum += right; } } printf("have %d!\n", count); }
三:单链表的冒泡排序
#include <stdio.h> #include <string.h> #include <stdlib.h> struct test_t { struct test_t *next; int a; }; int create_list(struct test_t **head, int *arr, int num) { int i; struct test_t *walker; for (i = 0; i < num; i++) { walker = (struct test_t *)malloc(sizeof(*walker)); walker->a = arr[i]; walker->next = *head; *head = walker; } return 0; } void print_list(struct test_t *head) { struct test_t *walker; for (walker = head; walker; walker = walker->next) { printf(" %d", walker->a); } printf("\n"); } int sort_list(struct test_t **head) { struct test_t *walker, *swap, *tail, *prev; int count = 1; // print_list(*head); tail = NULL; while (*head != tail) { for (walker = *head; walker->next != tail;) { if (walker->a > walker->next->a) { if (walker == *head) { *head = walker->next; } else { prev->next = walker->next; } prev = walker->next; walker->next = walker->next->next; prev->next = walker; } else { prev = walker; walker = walker->next; } } printf("%d:\n", count); print_list(*head); count++; tail = walker; } } int main(void) { int arr[] = {1,3,27,6,3,20,68,15,35}; int num; struct test_t *head = NULL; num = sizeof(arr) / sizeof(int); create_list(&head, arr, num); print_list(head); sort_list(&head); print_list(head); }
相关文章推荐
- 简单LRU算法实现缓存
- 杭电ACM几个简单的算法
- 非阻塞算法-简单的计数器
- 学习C#从俄罗斯方块开始(二)俄罗斯方块的规则和算法的简单实现
- 一个简单的小算法编程题 - 平分多边形边长
- 多媒体开发之---一个简单的音视频同步算法
- 算法竞赛入门 | 暴力求解法 | 简单枚举
- 图像处理------简单脸谱检测算法
- 简单讲解KMP单模式匹配与AC算法多模式匹配(KMP篇)
- 简单的置换算法
- JAVA自学-20180319简单算法、常用类
- 一道简单的算法题
- 简单算法—计算表达式
- 简单算法--归并排序
- 简单的滚动条算法 (j2me描述)
- LCS算法实现简单中文文本相似度分析
- [hihoCoder太阁最新面经算法竞赛8]题目2 : Dice Possibility(简单记忆化搜索)
- 教你用算法设密码:简单易记、超难破解的密码!!!
- 面试中简单算法题实现一道
- 数据结构与简单算法-排序算法