当前位置:   article > 正文

排序算法-希尔排序(进阶版插入排序)

排序算法-希尔排序(进阶版插入排序)

原理

他就是提高了插入的效率,选定步长,根据步长进行分组然后根据组进行插入排序.

步长不断减少,当减少到1时就是插入排序

时间复杂度最坏情况O(N^2)

其实可以理解成插入排序是根据1来排序,而希尔排序是根据步长来排序的.

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. void shellSort(vector<int>& v)
  6. {
  7. //没有元素或元素少于两个不需要排序
  8. if (v.empty() || v.size() < 2)
  9. {
  10. return;
  11. }
  12. //确定步长
  13. for (int i = v.size() / 2; i > 0; i /= 2)
  14. {
  15. //根据步长进行插入排序
  16. for (int j = i; j < v.size(); j += i)
  17. {
  18. for (int k = j; k > 0; k -= i)
  19. {
  20. if (v[k] < v[k - i]) //升序
  21. {
  22. swap(v[k], v[k - 1]);
  23. }
  24. }
  25. }
  26. }
  27. }
  28. int main()
  29. {
  30. vector<int> v = { 32,4,7,24,5,245,7,245,657,28 };
  31. shellSort(v);
  32. for (auto val : v)
  33. {
  34. cout << val << " ";
  35. }
  36. cout << endl;
  37. return 0;
  38. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/750077
推荐阅读
相关标签
  

闽ICP备14008679号