希尔排序的c++代码
时间: 2024-06-20 14:03:29 浏览: 78
希尔排序是一种插入排序的改进版本,它可以更高效地对数组进行排序。其基本思想是将待排序的数组分割成若干个子序列,分别进行插入排序,使整个序列基本有序,然后再对整个序列进行插入排序。以下是希尔排序的C++代码实现:
```cpp
void shellSort(int arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap];
}
arr[j] = temp;
}
}
}
```
相关问题
希尔排序c++代码
希尔排序(Shell Sort)是插入排序的一种改进版本,通过将待排序数据划分为若干个子序列分别进行插入排序,从而达到排序的目的。希尔排序的时间复杂度为O(nlogn),相较于插入排序的O(n^2)具有更好的性能。
以下是一个基于C++的希尔排序代码示例:
```c++
#include <iostream>
#include <vector>
void shellSort(std::vector<int>& nums) {
int n = nums.size();
for(int gap = n / 2; gap > 0; gap /= 2) {
for(int i = gap; i < n; i++) {
int temp = nums[i];
int j;
for(j = i; j >= gap && nums[j - gap] > temp; j -= gap) {
nums[j] = nums[j - gap];
}
nums[j] = temp;
}
}
}
int main() {
std::vector<int> nums = {5, 2, 6, 0, 3, 9, 1, 7, 4, 8};
shellSort(nums);
for(int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
在上述代码中,我们定义了一个名为`shellSort()`的函数,用于对输入的vector进行希尔排序。首先,我们获取输入vector的长度n,并设置一个初始的间隔gap为n/2。随后,我们在一个循环中不断将gap折半,直到gap为0结束循环。在每次循环中,我们从第gap个元素开始遍历整个vector,对每个元素进行插入排序操作。具体来说,我们将当前元素保存到temp中,然后从当前元素往前遍历,如果前面的元素大于temp,则将前面的元素后移gap个位置,直到找到一个比temp小的元素,然后将temp插入到该元素的后面gap个位置处。最后,我们使用一个循环输出已排序的vector。
需要注意的是,在实际应用中,我们可能需要根据具体数据的特点选择不同的间隔序列,以达到更好的效果。
希尔排序C++代码
好的,以下是希尔排序的 C++ 代码:
```cpp
#include <iostream>
using namespace std;
void shellSort(int arr[], int n) {
for (int gap = n/2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
int main() {
int arr[] = {12, 34, 54, 2, 3};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "Before sorting: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
shellSort(arr, n);
cout << "After sorting: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
希望能帮到你!
阅读全文