编程珠玑 11章 排序
2012-05-15 21:24
148 查看
/* sort.c */ /* 编程珠玑 */ /* 11 排序 */ /* 直接插入排序 1 */ void insert_sort(int array[], int n) { int i , j; int tmp; for (i = 1; i < n; i++) { for (j = i; j > 0 && array[j - 1] > array[j]; j--) { tmp = array[j ]; array[j] = array[j - 1]; array[j - 1] = tmp; } } } /* 直接插入排序2 */ void insert_sort(int array[], int n) { int i, j; int tmp; for (i = 1; i < n; i++) { tmp = array[i]; for (j = i; j > 0 && array[j - 1] > array[j]; j--) { array[j] = array[j - 1]; } array[j - 1] = tmp; } } /* 快速排序1 */ void qsort(int array[], int l, int u) { int m; int i; int tmp; if (l >= u) { return; } m = l; for (i = l + 1; i <= u; i++) { if (array[i] < array[l]) { tmp = array[i]; array[i] = array[++m]; array[m] = tmp; } } tmp = array[m]; array[m] = array[l]; array[l] = tmp; qsort(array, l, m - 1); qsort(array, m + 1, u); } /* 快速排序2 */ void qsort(int array[], int l, int u) { int i; int tmp; if (l >= u) { return; } tmp = array[l]; i = l; j = u + 1; while (1) { do { i++; }while (array[i] < t); do { j--; }while (array[j] > t); if (j < i) { break; } swap(i, j); } swap(l, j); qsort(l, j - 1); qsort(j + 1, u); }
相关文章推荐
- 编程珠玑第2章:排序、二分查找、签名、向量平移
- 排序问题-《编程珠玑》 ch1 开篇_ 1.6.3
- 编程珠玑:插入排序的最优探索,以及快排
- 处理大数据的排序(源自书籍:编程珠玑第二版)
- 磁盘排序(编程珠玑第一章)
- 《编程珠玑》第一章-位图排序
- 编程珠玑--位图法排序
- 编程珠玑开篇--磁盘文件排序问题
- 编程珠玑-如何给10^7个数据量的磁盘文件排序
- 位图排序概要 编程珠玑(第一章)-----学习笔记
- 位图排序-《编程珠玑》
- 《编程珠玑》第一章-位图排序
- 编程珠玑第2章:排序、二分查找、签名、向量平移
- 编程珠玑_磁盘中无重复大量整数数据排序限制内存借助位图
- 编程珠玑——初体验:排序
- 在二分搜索应用于未排序的数组时加入部分检测程序—编程珠玑第五章习题5
- 位图排序概要 编程珠玑(第一章)-----学习笔记
- 位图排序——《编程珠玑》笔记
- 《编程珠玑》阅读小记(8) — 排序
- 编程珠玑第一章,电话号码排序问题