排序算法
来源:互联网 发布:2016人工智能论坛 编辑:程序博客网 时间:2024/06/05 22:45
一、插入排序-直接插入排序
1.描述:
直接插入排序,指每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
2.基本思想:
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
要点:设立哨兵,作为临时存储和判断数组边界之用
3.源代码:
#include<stdio.h>#include<stdlib.h>int main(){ int a[] = { 98, 76, 109, 34, 67, 190, 80, 12, 14, 89, 1 }; int k = sizeof(a) / sizeof(a[0]); int i = 0; int j = 0; for (i = 1; i < k; i++)//循环从第2个元素开始 { if (a[i]<a[i - 1]) { int temp = a[i]; for (j = i - 1; j >= 0 && a[j]>temp; j--) { a[j + 1] = a[j]; } a[j + 1] = temp;//此处就是a[j+1]=temp; } } for (i = 0; i < k; i++) { printf("%d ", a[i]); } system("Pause"); return 0;}
二、选择排序-简单选择排序
1.描述:
每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
2.基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
3.源代码:
#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; int j = 0; int a[] = { 9, 1, 2, 5, 7, 4, 8, 6, 3, 5 }; int sz = sizeof(a) / sizeof(a[0]); for (i = 0; i < sz - 1; i++) { int temp = 0; int index = i; for (j = i + 1; j < sz; j++) { if (a[index] > a[j]) { index = j; } } temp = a[index]; a[index] = a[i]; a[i] = temp; } for (i = 0; i < sz; i++) { printf("%d ", a[i]); } printf("\n"); system("Pause"); return 0;}
三、交换排序-冒泡排序
1.描述:
重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
2.基本思想:
每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
3.源代码:
#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; int j = 0; int temp = 0; int a[] = { 49, 38, 65, 97, 76, 13, 27 }; int sz = sizeof(a) / sizeof(a[0]) - 1; for (j = 0; j <= sz ; j++) { for (i = 0; i < sz - j; i++) if (a[i]>a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } for (i = 0; i < sz + 1; i++) printf("%d ", a[i]); printf("\n"); system("Pause"); return 0;}
四、交换排序-快速排序
1.描述:
快速排序是对冒泡排序的一种改进,采用一种分治的策略。
2.基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3.源代码:
int quicksort(vector<int> &v, int left, int right){ if (left < right) { int key = v[left]; int low = left; int high = right; while (low < high) { while (low < high && v[high] > key) { high--; } if (low < high) v[low++] = v[high]; while (low < high && v[low] < key) { low++; } if (low < high) v[high--] = v[low]; } v[low] = key; quicksort(v, left, low - 1); quicksort(v, low + 1, right); }}
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- visual studio C++ 使用OpenMP 进行并行计算
- 蓝桥杯 算法提高 快乐司机
- 感知机模型
- OPENGL学习笔记之九
- typeScript中的类型
- 排序算法
- HTML DOM Event 对象(Attribute对象)
- Python logging模块
- spring JdbcTemplate 火推04
- intellij IDEA快捷键
- Zabbix自动发现和监控主机
- 什么是Hadoop,怎样学习Hadoop
- centos装python3
- HDU-2097-Sky数