![]() |
#2
lintaoyn2010-12-30 08:13
|

//插入排序
void sort1(int a[], int n)
{
for(int i = 1; i != n; ++i)
{
//如果当前数字比相邻的数小
if(a[i] < a[i-1])
{
int j;
int temp = a[i];
for(j = i-1; temp < a[j]; --j)
{
//数字右移
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
}
//希尔排序
void ShellInsert(int a[], int n, int d)
{
for(int i = d; i != n; ++i)
{
////如果当前数字比相邻的数小
if(a[i] < a[i-d])
{
int j;
int temp = a[i];
for(j = i-d; j >= 0 && temp < a[j]; j -= d)
{
//元素右移
a[j+d] = a[j];
}
a[j+d] = temp;
}
}
}
void ShellSort(int a[], int n)
{
int d = n/2;
while(d != 1)
{
//增量插入排序
ShellInsert(a, n, d);
d = d/2;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {7, 2, 5, 3, 6};
int n = sizeof(a)/sizeof(*a);
ShellSort(a, n);
for(int i = 0; i != n; ++i)
{
cout<<a[i]<<endl;
}
return 0;
}
void sort1(int a[], int n)
{
for(int i = 1; i != n; ++i)
{
//如果当前数字比相邻的数小
if(a[i] < a[i-1])
{
int j;
int temp = a[i];
for(j = i-1; temp < a[j]; --j)
{
//数字右移
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
}
//希尔排序
void ShellInsert(int a[], int n, int d)
{
for(int i = d; i != n; ++i)
{
////如果当前数字比相邻的数小
if(a[i] < a[i-d])
{
int j;
int temp = a[i];
for(j = i-d; j >= 0 && temp < a[j]; j -= d)
{
//元素右移
a[j+d] = a[j];
}
a[j+d] = temp;
}
}
}
void ShellSort(int a[], int n)
{
int d = n/2;
while(d != 1)
{
//增量插入排序
ShellInsert(a, n, d);
d = d/2;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {7, 2, 5, 3, 6};
int n = sizeof(a)/sizeof(*a);
ShellSort(a, n);
for(int i = 0; i != n; ++i)
{
cout<<a[i]<<endl;
}
return 0;
}
根据规则照着插入排序得出的代码,但排序结果不对,网上搜了下,貌似也差不多,求排错啊!