• 希尔排序之C++实现(初级版)


    希尔排序之C++实现(初级版)

    一、源代码:希尔排序之C++实现(初级版)

     1 /*希尔排序基本思想:
     2 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。
     3 所有距离为d1的倍数的记录放在同一个组中。
     4 先在各组内进行直接插入排序;
     5 然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。*/
     6 #include<iostream>
     7 using namespace std;
     8 /*定义输出一维数组的函数*/
     9 void print(int array[], int n)
    10 {
    11     for (int i = 0; i < n; i++)
    12     {
    13         cout << array[i] << " ";
    14     }
    15     cout << endl;
    16 }
    17 
    18 int shellSort(int array[], int n)
    19 {
    20     //定义变量,记录交换次数
    21     int count = 0;
    22     //定义中间变量,做为临时交换变量
    23     int temp;
    24     int j;
    25     //遍历数组(进行排序)
    26     cout << "开始对数组进行排序了..." << endl;
    27     //定义初始增量值
    28     int gap = n;
    29     do{
    30         //初始增量变化规律
    31         gap = gap / 3 + 1;
    32         for (int i = gap; i < n; i++)
    33         {
    34             //当左边元素大于右边元素时
    35             if (array[gap] < array[i - gap])
    36             {
    37                 //将当前的数组元素存储到临时变量中
    38                 temp = array[i];
    39                 //将从i位置(比temp大的元素)开始的数组元素整体后移
    40                 for (j = i - gap; j >= 0 && array[j]>temp; j -= gap)
    41                 {
    42                     cout << array[j] << "" << array[j + gap] << "互换了" << endl;
    43                     //将数组中的元素整体后移一个单位
    44                     array[j + gap] = array[j];
    45                     //输出此时数组的顺序
    46                     cout << "数组此时的顺序是:";
    47                     print(array, 10);
    48                     //每交换一次,记录数加1
    49                     count++;
    50                 }
    51                 array[j + gap] = temp;
    52             }
    53         }
    54     } while (gap > 1);
    55     cout << "数组排序结束了..." << endl;
    56     return count;
    57 }
    58 
    59 int main()
    60 {
    61     //定义待排序的一维数组
    62     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
    63     //输出原始数组
    64     cout << "原始数组是:" << endl;
    65     print(array, 10);
    66     //对数组进行排序
    67     int count = shellSort(array, 10);
    68     //输出排序后的数组
    69     cout << "排序后的数组是:" << endl;
    70     print(array, 10);
    71     cout << "共交换" << count << "" << endl;
    72     return 0;
    73 }

    二、运行效果

  • 相关阅读:
    华为机试:字符串翻转
    华为机试:数字颠倒
    华为机试:字符个数统计
    华为机试:提取不重复的整数
    华为机试:取近视值
    华为机试:进制转换
    华为机试:字符串分隔
    华为机试:明明的随机数
    华为机试:字符串最后一个单词的长度
    网易:相反数
  • 原文地址:https://www.cnblogs.com/zfc-java/p/7396413.html
Copyright © 2020-2023  润新知