用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

咕噜船长    -  云代码空间

——

希尔排序算法的实现

2017-08-03|103阅||

摘要:根据希尔算法排序的要求,时间复杂度O(n^2),将数据分组进行排序,实际测试中出现:希尔排序的时候每次调换位置,都应该从小端下标开始调换,如果从大端开始进行调换的话得不到正确的答案。对此如果有疑问的话,欢迎和我一起讨论~ //以下代码亲测可以使用,设定的数组为10个数,可以输

根据希尔算法排序的要求,时间复杂度O(n^2),将数据分组进行排序,实际测试中出现:希尔排序的时候每次调换位置,都应该从小端下标开始调换,如果从大端开始进行调换的话得不到正确的答案。对此如果有疑问的话,欢迎和我一起讨论~

//以下代码亲测可以使用,设定的数组为10个数,可以输出每一次交换的结果以及最终的排序后的结果

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{  
//希尔排序算法
int number[10];
int x = 0;
for (int i = 0; i < 10; i++)
{
number[i] = 0;
cin >> number[i];
}
cout << "the initial shunxu is:";
for (int k = 0; k < 10; k++)
{
cout<<" "<< number[k]<<" ";
}
cout << endl;
int time = 10 / 2;
int pre_time = 10;
//这里总共有10个数字
while (time >= 1)
{
x++;//用于统计排序了多少次
for (int j = 10 - time; j < 10; j++)
{
int h = j;  //用来寻找最初的下标值
int k = j;
while (h - time>=0){
if (h - time>=0){  //5-5要>=0
h = h - time;//找到最开始的下标
}
else{
break;
//此时h就是最小的那个值
}
}
//里层还应嵌套一层循环
while (h + time <= j)//这个循环控制每一次的向前移动
{
if (number[h] > number[h + time])
{
//进行交换
int pause = number[h];
number[h] = number[h+time];
number[h + time] = pause;
}
int hh = h;//保存一下h的值
while (h-time>=0){
if (number[h] < number[h - time]){
//继续向前进行调换顺序
int pause = number[h];
number[h] = number[h - time];
number[h - time] = pause;
}
h = h - time;
}
h = hh;
h = h + time;
}


}

pre_time = time;
time = time / 2;


cout << endl;
for (int k = 0; k < 10; k++)
{
cout << " " << number[k] << " ";
}
}
cout << endl;
cout << "the last shunxu is:";
//printf("最终的排序顺序是:");
for (int k = 0; k < 10; k++)
{
cout << " " << number[k] << " ";
}
return 0;
}
顶 2踩 0收藏
分享到:
更多
文章评论
    发表评论

    个人资料

    • 昵称: 咕噜船长
    • 等级: 中级程序员
    • 积分: 185
    • 代码: 0 个
    • 文章: 3 篇
    • 随想: 0 条
    • 访问: 5 次
    • 关注

    人气代码

      最新提问

        站长推荐