深入浅出理解排序算法之-希尔排序
2014-09-30 22:00
141 查看
#include <stdio.h>
/* 希尔排序
基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化。(外部分组gap,组内部插入排序!!)
特点:一种不稳定的排序
*/
void ShellSort(int array[],int len){
int i,j;
int gap;// gap
int temp;
for (gap = len/2 ; gap >0 ; gap = gap/2){ //核心就是
array[j+gap]与 array[j]比较,直到gap=1
for (i = gap; i < len ; i++){ // i: gap ~ <len(i++) 4、3、2、1...
temp = array[i];
for (j = i - gap; j >=0; j-=gap) {// j: i-gap ~ >=0(j=j-gap)
if (temp < array[j]) {
array[j+gap] = array[j];
// 如果待插入元素<前面序列,则后移元素
}
else
break;
}
array[j+gap] = temp;
// 空位填上待插入元素即可
}
}
}
int main(int argc,constchar * argv[])
{
int i =0;
int a[] = {5,4,9,8,7,6,0,1,3,2};
int len =sizeof(a)/sizeof(a[0]);
// 希尔排序
ShellSort(a, len);
for (i =0; i < len; i++) {
printf("%d ",a[i]);
}
printf("\n\n");
return0;
}
/* 希尔排序
基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化。(外部分组gap,组内部插入排序!!)
特点:一种不稳定的排序
*/
void ShellSort(int array[],int len){
int i,j;
int gap;// gap
int temp;
for (gap = len/2 ; gap >0 ; gap = gap/2){ //核心就是
array[j+gap]与 array[j]比较,直到gap=1
for (i = gap; i < len ; i++){ // i: gap ~ <len(i++) 4、3、2、1...
temp = array[i];
for (j = i - gap; j >=0; j-=gap) {// j: i-gap ~ >=0(j=j-gap)
if (temp < array[j]) {
array[j+gap] = array[j];
// 如果待插入元素<前面序列,则后移元素
}
else
break;
}
array[j+gap] = temp;
// 空位填上待插入元素即可
}
}
}
int main(int argc,constchar * argv[])
{
int i =0;
int a[] = {5,4,9,8,7,6,0,1,3,2};
int len =sizeof(a)/sizeof(a[0]);
// 希尔排序
ShellSort(a, len);
for (i =0; i < len; i++) {
printf("%d ",a[i]);
}
printf("\n\n");
return0;
}
相关文章推荐
- 深入浅出理解排序算法之-选择排序
- 深入浅出理解排序算法之-冒泡排序
- 深入浅出理解排序算法之-选择排序
- 深入浅出理解排序算法之-堆排序
- 深入浅出理解排序算法之-插入排序
- 深入浅出理解排序算法之-归并排序
- 【基础算法】希尔排序-如何着手理解一个排序算法
- 深入浅出理解排序算法之-快速排序
- 深入浅出理解排序算法之-堆排序
- 深入浅出理解排序算法之-插入排序
- 简简单单学算法-排序算法一(希尔排序)
- 8)排序③排序算法之插入排序[2]希尔排序
- 排序算法之归并排序的理解与实现
- [置顶] 排序算法之希尔排序 java实现
- 排序算法---希尔排序
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- 【数据结构和算法】排序算法之四:希尔排序
- 希尔排序_排序算法_算法
- [030]八大排序算法详解——希尔排序
- SQL Server 索引结构及其使用(一)--深入浅出理解索引结构第1/4页