Shell Sort(希尔排序)
2016-11-08 14:15
387 查看
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10
typedef struct{
int a[maxsize+1];
int length;
}sqlist;
void shellsort(sqlist*l){
int i,j;
int increment=l->length;
do{
increment=increment/3+1;
for(i=increment+1;i<=l->length;i++){
if(l->a[i]<l->a[i-increment]){
l->a[0]=l->a[i];
for(j=i-increment;j>0 && l->a[j]>l->a[0];j -= increment)
{
l->a[j+increment]=l->a[j];//红色字体作用是交换a[i]和a[i-increment]的值
}
l->a[j+increment]=l->a[0];
}
}
}
while(increment>1); //(当increment<=1时结束循环)
}
int main(){
int i;
sqlist *l;
l=(sqlist*)malloc(sizeof(sqlist));
scanf("%d",&l->length);
for(i=1;i<=l->length;i++){
scanf("%d",&l->a[i]);
}
shellsort(l);
for(i=1;i<=l->length;i++){
printf("%d\n",l->a[i]);
}
return 0;
}
#include <stdlib.h>
#define maxsize 10
typedef struct{
int a[maxsize+1];
int length;
}sqlist;
void shellsort(sqlist*l){
int i,j;
int increment=l->length;
do{
increment=increment/3+1;
for(i=increment+1;i<=l->length;i++){
if(l->a[i]<l->a[i-increment]){
l->a[0]=l->a[i];
for(j=i-increment;j>0 && l->a[j]>l->a[0];j -= increment)
{
l->a[j+increment]=l->a[j];//红色字体作用是交换a[i]和a[i-increment]的值
}
l->a[j+increment]=l->a[0];
}
}
}
while(increment>1); //(当increment<=1时结束循环)
}
int main(){
int i;
sqlist *l;
l=(sqlist*)malloc(sizeof(sqlist));
scanf("%d",&l->length);
for(i=1;i<=l->length;i++){
scanf("%d",&l->a[i]);
}
shellsort(l);
for(i=1;i<=l->length;i++){
printf("%d\n",l->a[i]);
}
return 0;
}
相关文章推荐
- 希尔排序(shellsort)
- 排序算法之希尔排序(Shellsort)
- [算法] 希尔排序 Shell Sort
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- Java 希尔排序(Shell Sort)
- 算法总结JS版(四)—— 希尔排序(Shell Sort)
- C:C的排序算法:希尔排序(ShellSort)
- 【DS】排序算法之希尔排序(Shell Sort)
- 希尔排序(ShellSort程序完整版)
- 常用算法——希尔排序(Shell Sort)
- 希尔排序(shellsort)算法实现
- 希尔排序(Shell Sort)
- Insert Sort & Shell Sort(插入排序和希尔排序)
- 希尔排序(shell sort)
- Shell Sort 希尔排序
- 希尔排序(shellsort)算法实现 推荐
- 希尔排序(ShellSort)
- 数据算法之希尔排序(shellSort)的Java实现
- 希尔排序 Shell Sort
- 常用排序算法—Shell Sort(希尔排序)