经典算法与数据结构的c++实现——shell排序算法
来源:互联网 发布:淘宝网消费者投诉电话 编辑:程序博客网 时间:2024/05/16 14:22
因为是经典的算法,所以网上描述一大把,直接上个图,直观些,给记性不好的菜鸟(如我)一点儿提示。
shell排序算法,是插入算法的一种改进,降低时间复杂度,不同选取gap的方式将改变算法的实现,我这里的采取的判断gap值,保持gap为奇数。
下面是代码(欢迎批评指点,之后应该会放到github上:https://github.com/y277an/princeton_algs4):
//---------------------------------Specification of Program------------------------------// Program Name:shell排序// Tools:VS_2013// Language: C++// Description: 可自由输入,不需要提早知道数据长度// Date:2016.3.17// Author:mseddl//----------------------------------------------------------------------------------------#include <iostream>using namespace std;void Swap(int& one, int & another){one ^= another;another ^= one;one ^= another;}void ShellSort(int *arr, int len){for (int delta = len / 2; delta>0; delta /= 2)//delta为shell的间隔{if (delta % 2 == 0)//为了提高效率,保证不重复排序,若delta为偶数,使其变成奇数{delta--;}for (int i = 0; i < delta; i++)//每个小分段的逐次循环{//以下实质为插入排序for (int j = i+delta; j < len; j += delta)//j为要排序的间隔数{for (int m = j-delta; m>=0; m -= delta)//m为有序的间隔数{int temp = arr[m];//有序间隔数的最后一个if (arr[m+delta]<arr[m]){Swap(arr[m + delta], arr[m]);}}}}}}int main(){int len(0), temp;int *arr = new int[100];char ch;cout << "请输入要排序的数字,以空格隔开:";while (1){cin >> temp;arr[len++] = temp;cin.get(ch);if (ch == '\n'){break;}}ShellSort(arr, len);cout << "排序后的数字为:";for (int i = 0; i < len; i++){cout << arr[i] << " ";}cout << endl;delete[] arr;}
0 0
- 经典算法与数据结构的c++实现——shell排序算法
- 经典算法与数据结构的c++实现——冒泡排序
- 经典算法与数据结构的c++实现——插入排序
- 经典算法与数据结构的c++实现——直接选择排序
- 经典算法与数据结构的c++实现——快速排序
- 数据结构与算法---shell排序 .
- 数据结构与算法--几种排序的实现(C++)
- [数据结构与算法]白话经典算法系列之五 归并排序的实现
- shell排序算法的C/C++实现
- 经典排序算法-C实现
- 经典排序算法-C实现
- 经典排序算法-C实现
- 经典排序算法c实现
- 数据结构——经典排序算法
- 经典排序算法的设计与实现
- 【算法设计与数据结构】拓扑排序算法的实现——Kahn算法及基于dfs的算法
- 数据结构与算法——排序算法
- 数据结构与算法之经典排序
- DataBinding学习(四)
- NLP工具
- 关于检查链和事件响应链
- Clicker
- 反向迭代器(rbegin,rend)
- 经典算法与数据结构的c++实现——shell排序算法
- 静态语句块、构造语句块与构造方法执行顺序
- Mac下使用Automator实现截屏编辑保存
- poj1006 Biorhythms 边界,坑题
- Qt Creator 窗体控件自适应窗口大小布局
- 做好电商产品运营的10个立足点
- 闭包只是一种设计原则
- Java学习笔记(一)对象与类
- 【spark】使用线性回归对葡萄酒质量进行预测