插入排序修改了一下



void print(int a[], int n, int i){
cout << "第" << i + 1 << "趟 : ";
for (int j = 0; j < n; j++){
cout << a[j] << "   ";
}
cout << endl;
}




/**
* 插入排序
*/
void InsertSort(int a[], int n){
    /*
    初始值:3  1  5  7  2  4  9  6
    */
    for (int i = 1; i < n; i++){
      if (a[i] < a[i - 1]){
        int j = i - 1;
        int x = a[i];
        a[i] = a[j];

        while (x < a[j]){
          a[j + 1] = a[j];
          j--;
        }
        a[j + 1] = x;
      }
        print(a, n, i);
    }
}
插入排序和希尔排序都是常见的排序算法,适用于C语言编程。 插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素逐个插入到已排序序列中的适当位置,直到全部元素都插入完毕。具体实现时,可以使用两重循环,外层循环控制待插入的元素,内层循环将待插入元素与已排序序列中的元素进行比较并移动位置。\[2\] 希尔排序是插入排序的一种改进算法,它通过将待排序序列分割成若干个子序列,对每个子序列进行插入排序,然后逐步缩小子序列的间隔,最终完成整个序列的排序。希尔排序的关键在于选择合适的间隔序列,常用的间隔序列有希尔增量序列和Hibbard增量序列等。\[2\] 以下是插入排序和希尔排序的C语言代码示例: 插入排序: ```c void InsertionSort(int arr\[\], int n) { int i, j, key; for (i = 1; i < n; i++) { key = arr\[i\]; j = i - 1; while (j >= 0 && arr\[j\] > key) { arr\[j + 1\] = arr\[j\]; j--; } arr\[j + 1\] = key; } } ``` 希尔排序: ```c void ShellSort(int arr\[\], int n) { int gap, i, j, temp; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++) { temp = arr\[i\]; for (j = i; j >= gap && arr\[j - gap\] > temp; j -= gap) { arr\[j\] = arr\[j - gap\]; } arr\[j\] = temp; } } } ``` 以上是插入排序和希尔排序的简单实现,你可以根据需要进行修改和优化。 #### 引用[.reference_title] - *1* *2* *3* [C语言实现排序算法:冒泡排序、插入排序、希尔排序、堆排序、归并排序](https://blog.csdn.net/m0_72084056/article/details/126280789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值