鱼C论坛

 找回密码
 立即注册
查看: 2801|回复: 0

[学习笔记] 插入排序

[复制链接]
发表于 2019-1-19 19:46:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <stdlib.h>

  4. void Insert_Sort(int k[], int n);
  5. void Binary_Insert_Sort(int k[], int n);
  6. void Shell_Sort(int k[], int n);
  7. int d[] = { 5,3,1 };
  8. int main()
  9. {
  10.         int k[] = {50,26,38,80,70,90,8,30,40,20};
  11.         Shell_Sort(k,10);
  12.         printf("The sorted result: \n");
  13.         for (int i = 0; i < 10; i++) {
  14.                 printf("%d ", k[i]);
  15.         }
  16.         printf("\n\n");
  17. }

  18. /*直接插入排序*/
  19. void Insert_Sort(int k[], int n) {
  20.         int temp,i,j;
  21.         for (i = 1; i < n; i++) {
  22.                 if (k[i] < k[i - 1]) {
  23.                         temp = k[i];
  24.                         for (j = i - 1; temp < k[j] && j>=0; j--) {
  25.                                 k[j + 1] = k[j];
  26.                         }
  27.                         k[j+1] = temp;
  28.                 }
  29.         }
  30. }
  31. /*折半插入排序*/
  32. void Binary_Insert_Sort(int k[], int n) {
  33.        
  34.         int middle;
  35.         int i, j,temp;
  36.         for (i = 1; i < n; i++) {
  37.                 int low = 0;
  38.                 int high = i - 1;
  39.                 temp = k[i];
  40.                 while (low <= high) {
  41.                         middle = (low + high) / 2;
  42.                         if (k[middle] < temp) {
  43.                                 low = middle + 1;
  44.                         }
  45.                         else if(k[middle] > temp) {
  46.                                 high = middle - 1;
  47.                         }
  48.                         else {
  49.                                 break;
  50.                         }
  51.                 }
  52.                 for (j = i - 1; j > high; j--) {
  53.                         k[j + 1] = k[j];
  54.                 }
  55.                 k[high + 1] = temp;
  56.         }
  57. }
  58. /*希尔排序*/
  59. void Shell_Sort(int k[], int n) {
  60.         int i, j, l, temp;
  61.         for (i = 0; i < 3; i++) {
  62.                 for (j = d[i]; j < n; j++) {
  63.                         if (k[j] < k[j - d[i]]) {
  64.                                 temp = k[j];
  65.                                 for (l = j - d[i]; k[l] > temp; l-=d[i]) {
  66.                                         k[l + d[i]] = k[l];
  67.                                 }
  68.                                 k[l + d[i]] = temp;
  69.                         }
  70.                 }
  71.         }
  72. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-13 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表