插入排序:

插入排序在最坏情况和平均情况下时间复杂度是Θ(n2)

#include <stdio.h>
#define LEN 5int a[LEN] = {10, 5, 2, 4, 7};void print(void)
{for (int i = 0; i < LEN; i++)printf(" %d", a[i]);printf("\n");
}void insertion_sort(void) //该算法要求背诵
{int j, key;for (int i = 1; i < LEN; i++){print();key = a[i];for (j = i - 1; j >= 0 && a[j] > key; j--)a[j + 1] = a[j];a[j + 1] = key;}print();
}int main(void)
{insertion_sort();return 0;
}

选择排序:

#include <stdio.h>
#define LEN 5int a[LEN] = {10, 5, 2, 4, 7};void print(void)
{for (int i = 0; i < LEN; i++)printf(" %d", a[i]);printf("\n");
}void selection_sort(void) //该算法要求背诵
{int min, low;for (int i = 0; i < LEN - 1; i++){print();min = a[i];low = i;for (int j = i + 1; j < LEN; j++){if (a[j] < min){min = a[j];low = j;}}a[low] = a[i];a[i] = min;}print();
}int main(void)
{selection_sort();return 0;
}

归并排序:

 1 #include <stdio.h>
 2 #define LEN 8
 3 int a[LEN] = {5, 2, 4, 7, 1, 3, 2, 6};
 4
 5 void merge(int start, int mid, int end)
 6 {
 7     int n1 = mid - start + 1; // mid - start + 1
 8     int n2 = end - mid;          // end - (mid+1) + 1
 9     int left[n1], right[n2];
10
11     //分别将a数组的左半部分和右半部分,拷贝到left和right数组
12     for (int i = 0; i < n1; i++) /* left holds a[start..mid] */
13         left[i] = a[start + i];
14     for (int j = 0; j < n2; j++) /* right holds a[mid+1..end] */
15         right[j] = a[mid + 1 + j];
16
17     //归并操作,将排序完毕的left和right中较小的切片拷贝到a数组
18     int i = 0, j = 0, k = start;
19     while (i < n1 && j < n2)
20     {
21         if (left[i] < right[j])
22         {
23             a[k] = left[i];
24             k++, i++; //这两条语句等价于a[k++] = left[i++];
25         }
26         else
27         {
28             a[k] = right[j];
29             k++, j++; //这两条语句等价于a[k++] = right[j++];
30         }
31     }
32
33     //经过上一步的归并,将left或者right中剩余的部分拷贝至a数组
34     while (i < n1)            /* left[] is not exhausted */
35         a[k++] = left[i++];   /* 循环体的展开形式同上 */
36     while (j < n2)            /* right[] is not exhausted */
37         a[k++] = right[j++];
38 }
39
40 void print(void)
41 {
42     for (int i = 0; i < LEN; i++)
43         printf(" %d", a[i]);
44     printf("\n");
45 }
46
47 void sort(int start, int end)
48 {
49     int mid;
50     if (start < end)
51     {
52         mid = (start + end) / 2;
53         printf("sort (%d-%d, %d-%d)", start, mid, mid + 1, end);
54         print();
55
56         sort(start, mid);
57         sort(mid + 1, end);
58         merge(start, mid, end);
59
60         printf("merge (%d-%d, %d-%d)", start, mid, mid + 1, end);
61         print();
62     }
63 }
64
65 int main(int argc, char const *argv[])
66 {
67     sort(0, LEN - 1);
68     return 0;
69 }

快速排序:

 1 #include <stdio.h>
 2 #define LENGTH 8
 3
 4 int a[LENGTH] = {5, 2, 4, 7, 1, 3, 8, 6};
 5
 6 int partition(int, int);
 7 void quicksort(int, int);
 8
 9 void quicksort(int start, int end)
10 {
11
12     if (start < end)
13     {
14         int mid = partition(start, end);
15         quicksort(start, mid - 1);
16         quicksort(mid + 1, end);
17     }
18 }
19
20 int partition(int start, int end)
21 {
22     int pivot = a[end];
23
24     while (start < end)
25     {
26         while (start < end && a[start] <= pivot)
27             start++;
28         a[end] = a[start];
29
30         while (start < end && a[end] >= pivot)
31             end--;
32         a[start] = a[end];
33     }
34
35     a[start] = pivot;
36     return start;
37 }
38
39 int main(int argc, char const *argv[])
40 {
41     for (int i = 0; i < LENGTH; i++)
42         printf(" %d", a[i]);
43     printf("\n");
44
45     quicksort(0, LENGTH - 1);
46
47     for (int i = 0; i < LENGTH; i++)
48         printf(" %d", a[i]);
49     printf("\n");
50
51     return 0;
52 }

转载于:https://www.cnblogs.com/echo1937/p/10134311.html

插入,选择,归并,快速排序相关推荐

  1. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

    排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序:   直接插入排序    希尔排序 (插入)  冒泡排序     快速排序  (交换) 直接选择排序  ...

  2. 1035. 插入与归并(25)

    1035. 插入与归并(25)根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元 ...

  3. C++学习之路 | PTA乙级—— 1035 插入与归并 (25 分)(精简)

    1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...

  4. PAT乙级(1035 插入与归并)

    PAT乙级 1035 插入与归并 解题思路 代码 详细题目见官网 大意:给定序列,第一行为原始序列,第二行为某种排序产生的中间序列 输出结果: 第一行,输出是 插入排序 还是 归并排序 第二行,给出该 ...

  5. 【2020模拟考试T5】【PAT乙】1035 插入与归并 (25分) 两种排序的sort写法

    problem 1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位 ...

  6. PAT 乙级 1035  插入与归并

    1035 插入与归并 (25 point(s)) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位 ...

  7. 1035 插入与归并(C++)

    题目详情 1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如 ...

  8. 【题解】【AcWing】1579. 插入还是归并

    1579. 插入还是归并 原题传送:AcWing 1579. 插入还是归并 根据维基百科: 插入排序迭代,每次将一个插入元素插入到排好序的输出序列中,每次迭代插入排序都会从输入数据中移除一个元素,并在 ...

  9. JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序)

    1. 冒泡 // 冒泡 - 每次循环, 将两两中偏大的元素移动到右边 for (let i = 0; i < arr.length - 1; i++) {for (let j = i; j &l ...

  10. Python数据结构04-冒泡、选择、插入、归并、希尔、快速排序、二分查找

    Python数据结构 各种排序实现 常见排序算法效率比较 搜索 二分法查找 各种排序实现 排序思想不做描述. #冒泡 def bubble_sort(alist):for x in range(0,l ...

最新文章

  1. Log4Net配置使用简记
  2. python控制摄像头拍照_python+opencv+pyqt5控制摄像头在Qlabel上显示
  3. 几个非常有用的iOS学习博客链接
  4. Leetcode - 142. Linked List Cycle II
  5. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
  6. 【王道考研计算机网络】—速率相关的性能指标
  7. windows设置开机启动项
  8. 有没有五金产品展开计算机软件,拆单软件功能介绍
  9. SwitchNAT 测试
  10. SecureCRT 中文(附上1.解决SecureCRT乱码问题2.解决Hostname lookup failed: host not found问题)
  11. eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
  12. R语言 dbWriteTable 写入数据库为空和乱码问题
  13. Jupyter Notebook中使用conda配置的Python虚拟环境
  14. 乌卡时代下,企业供应链管理体系的应对策略
  15. 未知usb设备(设备描述请求失败)_HomePod mini?电源线同样不可拆卸:但或能用USB-C移动电源供电...
  16. 搭载敏捷飞天底座 阿里云专有云敏捷版全面升级
  17. html一条竖线写法
  18. 重新做计算机老师的说说,说说我们电脑班老师 ── 刁元清
  19. c语言 投影法图像定位,基于抛物线拟合和边缘点搜索的虹膜精确定位
  20. PostgreSQL回滚TRUNCATE操作的原理

热门文章

  1. android 自定义span_教你自定义android中span
  2. mongodb 3.4 安装_Python数据分析及可视化实例之CentOS7.2+MongoDB V3.4 安装
  3. Visio studio 2019中opencv 4.1.1运行环境配置(亲测可用)
  4. 概率机器人总结——占用栅格地图先实践再推导
  5. 机器视觉 · 立体相机
  6. 全球及中国皮裤行业消费需求及未来产销前景预测报告2022-2027年
  7. 中国氨纶市场“十四五”规划及未来动态分析报告2021年版
  8. 【转载】一个男人关心的东西 决定了他的层次
  9. 福大软工1816:项目测评
  10. 探秘小程序(9):父页面与自定义组件交互