排序学习笔记
来源:互联网 发布:淘宝培训班哪家好 编辑:程序博客网 时间:2024/05/22 06:41
学习资料:
维基百科-排序算法:http://en.wikipedia.org/wiki/Sorting_algorithm
程序员必知8大排序3大查找:http://blog.csdn.net/shan9liang/article/details/7533466
1. 插入排序(Insertion Sort)
实现思路:
1)从第一个元素开始,该元素可以认为已经被排序
2)取出下一个元素,按从后向前(从大到小)的次序,逐一与以排序好的元素比较
3)如果该元素小于比较的元素,将比较的元素后移一位置
4)重复步骤3,直到该元素不小于比较的元素
5)将新元素插入到该位置中
6)重复步骤2~5
//直接插入排序void insertion_sort(int *array, int len){ int i, j; for(i = 1; i < len; i++) { j = i - 1; while(array[j] > array[i] && j >= 0) { array[j+1] = array[j]; j--; } array[j+1] = array[i]; //print_array(array, len); }}
2.希尔排序(Shell sort)
基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
//希尔排序void shell_sort(int *array, int len){ int gap; int i, j; for(gap = len / 2; gap > 0; gap /= 2) { for(i = gap; i < len; i++) { for(j = i - gap; j >= 0; j -= gap) { if(array[j] > array[j+gap]) { // swap(&array[j], &array[j+gap]); int temp = array[j]; array[j] = array[j+gap]; array[j+gap] = temp; } } } //print_array(array, len); }}
3.选择排序(Selection sort)
基本思想:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕。
void select_sort(int *array, int len){ int i, j; int i_min; //最小元素的下标 for(i = 0; i < len; i++) { i_min = i; for(j = i + 1; j <len; j++) { if(array[j] < array[i_min]) { i_min = j; } } if(i_min != i) { //swap(&array[i], &array[i_min]); int temp = array[i_min]; array[i_min] = array[i]; array[i] = temp; } //print_array(array, len); }}
4.冒泡排序(Bubble Sort)
基本思想:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
// 冒泡排序void bubble_sort(int *array, int len){ int i, j; for(i = len; i > 0; i--) { for(j = 1; j < i; j++) { if(array[j] < array[j-1]) { //swap(&array[j], &array[j-1]); int temp = array[j]; array[j] = array[j-1]; array[j-1] = temp; } } //print_array(array, len); }}
- 排序学习笔记1
- 排序学习笔记
- 排序学习笔记
- 冒泡排序学习笔记
- 插入排序学习笔记
- 希尔排序学习笔记
- 快速排序学习笔记
- 堆排序学习笔记
- 初探排序学习笔记
- 学习笔记--快速排序
- 排序算法学习笔记
- 排序算法学习笔记
- 堆排序学习笔记
- 快速排序学习笔记
- 归并排序学习笔记
- 学习笔记--堆排序
- 数据结构学习笔记----排序
- 算法学习笔记-排序
- uva-488 - Triangle Wave
- C语言的库文件
- ffmpeg的码率控制
- Httpservlet cannot be resolved to a type的原因与解决方法
- 四极管:JNI学习(一:书写步骤及简单在eclipse下实现JNI)
- 排序学习笔记
- IRP 的结构
- C# 在WinForm中按钮响应回车事件的简单方法
- 函数式语言特点之-闭包
- balance
- 实现一个冒泡提示的浮点数编辑框
- 简单介绍百度蜘蛛的工作原理
- Mybatis学习日记(一)
- 读中文txt里显示乱码问题