- 1. 直接插入排序
- 2. 简单选择排序
- 3. 冒泡排序
- 4. 快速排序
c语言各种排序算法
- 1. 直接插入排序
- 2. 简单选择排序
- 3. 冒泡排序
- 4. 快速排序
直接 插入排序 (Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。.
思路详见B站:(点击此处)
# define _CRT_SECURE_NO_WARNINGS #include# define NUM 10 void InsertSort(int num[],int n) { int i, j; int temp; for (i = 1; i < n; i++) //比如有5个数要进行4躺排序。 { temp = num[i]; //第一轮,让第二个数num[1]和num[0]比较然后插入。第二轮,让第三个数 与前面排序好的 两个数 的比较然后插入。 for (j = i - 1; j >= 0 && num[j] > temp; j--) { num[j + 1] = num[j]; //[1,3,5],**2**,6-----2小于5,让第四个位置等于5,在往前比较.... } num[j + 1] = temp; //最后插入后面 } } void main() { int num[NUM]; int i; for (i = 0; i < NUM; i++) scanf("%d", num + i); //随机输入NUM个数据。。 InsertSort(num, NUM); //调用排序函数。 for (i = 0; i < NUM; i++) printf("%-3d", num[i]); }
下面此处代码摘自博客:有人_295
供参考
#includevoid display(int array[], int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]); } printf("n"); } void InsertSort(int array[], int size) { for (int i = 1; i < size; i++) { // 第 1 个数肯定是有序的,从第 2 个数开始遍历,依次插入有序序列 int temp = array[i]; // 取出第 i 个数,和前 i-1 个数比较后,插入合适位置 int j = i - 1; // 因为前 i-1 个数都是从小到大的有序序列,所以只要当前比较的数 (array[j]) 比 temp 大,就把这个数后移一位 while (j >= 0 && array[j] > temp) { // 当 j < 0 或 array[j] < temp(array[i]) 时终止 array[j + 1] = array[j]; // 将大于 temp(array[i]) 的数据后移 j--; // 向前比较 } // 结束循环 array[j + 1] = temp; // array[i]插入到正确的位置上 //打印每次排序结果 display(array, size); } } int main() { int array[] = {49, 38, 65, 97, 76, 13, 27, 49, 10}; int size = sizeof(array) / sizeof(int); //打印原始数据 printf("%d n", size); display(array, size); InsertSort(array, size); return 0; }
运行结果
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
| 待排序序列 | 8,1,3,7,9,5,6 |
|---|---|
| 第一趟排序 | 1,8,3,7,9,5,6 |
| 第二趟排序 | 1,3,8,7,9,5,6 |
| 第三趟排序 | 1,3,5,7,9,8,6 |
| 第四趟排序 | 1,3,5,6,9,8,7 |
| 第五趟排序 | 1,3,5,6,7,8,9 |
| 第六趟排序 | 1,3,5,6,7,8,9 |
#includevoid SelectSort(int a[],int n){ int mix,temp; int i,j; for(i=0;i 3. 冒泡排序 (1)比较相邻两个数据,如果第一个比第二个大,就交换两个数
(2)对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后 的数就是最大的数。
(3)针对所有元素上面的操作,除了最后一个。
(4)重复1~3步骤,知道顺序完成。
详情思路B站冒泡排序(点击我)
# includeint main(void) { int i, j, t, n; int a[100]; scanf("%d",&n); getchar(); for(i=0;i a[j+1]) //相邻两个数比较 t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } for(i=0;i 4. 快速排序 参考B站视频(点击)



