利用选择排序为shell排序提速
来源:互联网 发布:淘宝加盟店辨别真假 编辑:程序博客网 时间:2024/06/07 15:36
#include <stdio.h>
void swapValue(int *temArr, int i, int j){
int tem = temArr[i];
temArr[i] = temArr[j];
temArr[j] = tem;
}
//基于增量的选择排序
void selectSort(int* temArr, int n, int delta){
for (int i=0; i<n; i = i + delta) {
int minIndex = i;
for (int j = i+delta; j<n; j+=delta) {
if (temArr[j] < temArr[minIndex]) {
minIndex = j;
}
}
swapValue(temArr, i, minIndex);
}
}
//shell排序
void shellSort(int *arr, int n){
for (int delta = n / 2; delta > 0; delta=delta/2) {
for (int i=0; i<delta; i++) {
selectSort(&arr[i], n-i, delta);
//printf("第%d次 增量%d\n", i, delta);
for (int i=0; i<n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}
//扫尾排序
// insertSort(&arr[0], n, 1);
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr = (int*)malloc(n*sizeof(int));
for (int i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
shellSort(arr, n);
return 0;
}
void swapValue(int *temArr, int i, int j){
int tem = temArr[i];
temArr[i] = temArr[j];
temArr[j] = tem;
}
//基于增量的选择排序
void selectSort(int* temArr, int n, int delta){
for (int i=0; i<n; i = i + delta) {
int minIndex = i;
for (int j = i+delta; j<n; j+=delta) {
if (temArr[j] < temArr[minIndex]) {
minIndex = j;
}
}
swapValue(temArr, i, minIndex);
}
}
//shell排序
void shellSort(int *arr, int n){
for (int delta = n / 2; delta > 0; delta=delta/2) {
for (int i=0; i<delta; i++) {
selectSort(&arr[i], n-i, delta);
//printf("第%d次 增量%d\n", i, delta);
for (int i=0; i<n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}
//扫尾排序
// insertSort(&arr[0], n, 1);
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr = (int*)malloc(n*sizeof(int));
for (int i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
shellSort(arr, n);
return 0;
}
1 0
- 利用选择排序为shell排序提速
- shell 实现 选择排序
- 插入排序,选择排序,Shell排序
- 选择排序,冒泡排序,插入排序,交换排序,shell排序
- Java冒泡排序、插入排序、选择排序、shell排序
- 实现冒泡排序、插入排序、选择排序、shell排序
- 利用Python实现选择排序
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- 选择排序法为数组排序
- Java实现排序(插入排序+冒泡排序+选择排序+ Shell排序+快速排序)
- 冒泡排序、交换排序、选择排序、插入排序、快速排序、SHELL排序
- 内排序(插入排序、冒泡排序、选择排序、shell排序、快速排序、归并排序、堆排序)
- 冒泡排序、快速排序、选择排序、插入排序、shell排序C代码
- 常用的选择排序.Shell排序.快速排序.冒泡排序.插入排序的算法
- Java插入排序、冒泡排序、选择排序、快速排序、shell排序(一)
- 初级排序算法(选择、插入、Shell)
- C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 排序--选择排序,插入排序,冒泡排序,shell排序,快速排序(递归,迭代,改进版本),归并排序
- 浅谈Draw Call和Batch的区别
- 51Nod-1080-两个数的平方和
- 重建二叉树
- Mongodb 数据类型
- 332. Reconstruct Itinerary
- 利用选择排序为shell排序提速
- 执行shell脚本报错 cannot execute binary file
- Android Service与Activity之间通信的几种方式
- 项目搭建git和github的使用
- 推荐一些国内的Jquery CDN免费服务
- SpringBoot+Logback+Sentry(日志监控平台)
- diff
- Linux 常用命令 之 搜索命令
- opencv程序编译后执行找不到库