山西建设部网站,深圳网站建设公司pestl分析,有什么推荐的网站,正版搜索引擎优化目录 插入排序#xff1a;
希尔排序#xff1a; 插入排序#xff1a;
注意这里不要将插入排序和冒泡排序弄混#xff1a;
插入排序是将数据不断放入前一个有序数列#xff1a; // 插入排序
void InsertSort(int* a, int n)
{for (int j 1; j n; j){for (int i j;…目录 插入排序
希尔排序 插入排序
注意这里不要将插入排序和冒泡排序弄混
插入排序是将数据不断放入前一个有序数列 // 插入排序
void InsertSort(int* a, int n)
{for (int j 1; j n; j){for (int i j; i 0; i--){if (a[i] a[i - 1]){int m a[i - 1];a[i -1] a[i];a[i] m;}else{break;}}}
}希尔排序
将插入排序进行多次实现从高间距到低间距最后到间距为1的插入排序
如图我们将具有相同标记的方格记为一组并分别对不同组进行插入排序这样就会将序列变得比原来有序这样不断进行并不断缩小排序的间距。 这样再次进行排序将会变的更加有序直到间距为1。间距为1时进行排序将变为插入排序序列将完全有序。
target为间距
// 希尔排序
void ShellSort(int* a, int n)
{int targetn/2;while (target){for (int m 0; m target; m)//实现多组排序{for (int j m; j n ; j target)//单组排序{for (int i j; i target-1; i - target)//这里不能是i0i-target最小为0{if (a[i] a[i - target]){int m a[i - target];a[i - target] a[i];a[i] m;}else{break;}}}}target / 2;}
}
当然这里我们进行三层循环有一些繁琐这里我们可以改善成为两层循环
也就是第一组进行一次插入排序第二组进行一次插排序........不断前进
// 希尔排序
void _ShellSort(int* a, int n)
{int target n / 2;while (target){for (int j 0; j n; j )//递进形式排序{for (int i j; i target - 1; i - target)//这里不能是i0i-target最小为0{if (a[i] a[i - target]){int m a[i - target];a[i - target] a[i];a[i] m;}else{break;}}}target / 2;}
}