实现插入排序和希尔排序——题集(十五)
今天分享一下实现插入排序和希尔排序和使用shell脚本实现希尔排序的源代码和运行示例。
实现插入排序的源代码和运行示例。
源代码如下:
#include<iostream>
using namespace std;
//实现插入排序
void InsertSort(vector<int>& aim){//插入排序
int size=aim.size();
if(size<=1) return;
for(int i=1; i<size; i++){
int j=i;
while(j-1>=0 && aim[j]< aim[j-1]){
swap(aim[j], aim[j-1]);
--j;
}
}
}
void PrintVector(vector<int> aim, int size){//打印
for(int i=0; i<size; i++){
cout<<aim[i]<<" ";
}
cout<<endl;
}
void TestIS(){///实现插入排序
int tmp[]={4,2,1,7,3,8};
int len=sizeof(tmp)/sizeof(tmp[0]);
cout<<"实现插入排序 "<<endl<<endl;
vector<int> aim;
for(int i=0; i<len; i++){
aim.push_back(tmp[i]);
}
cout<<"打印原数组: ";
PrintVector(aim, len);//打印
cout<<"打印插入排序后的数组: ";
InsertSort(aim);//插入排序
PrintVector(aim, len);//打印矩阵
cout<<endl;
}
int main(){
TestIS();///实现插入排序
system("pause");
return 0;
}
运行结果:
希尔排序的源代码和运行示例。
源代码如下:
#include<iostream>
using namespace std;
//希尔排序
void HillSort(vector<int>& aim, int len){//希尔排序
int grap=len;//保证最后一个增量必须为1
while(grap>1){
grap=grap/3+1;
for(int i=grap; i<len; i++){//最好,比较次数少,且正确
int j=i;
while(j-grap>=0 && aim[j] < aim[j-grap]){//类插入排序
swap(aim[j] , aim[j-grap]);
j=j-grap;
}
}
}
return;
}
void PrintVector(vector<int> aim, int size){//打印
for(int i=0; i<size; i++){
cout<<aim[i]<<" ";
}
cout<<endl;
}
void TestHS(){///实现希尔排序
//int tmp[]={8,9,7,1,2,3,4};
int tmp[]={49,38,65,97,76,13,27,49,55,4};
int len=sizeof(tmp)/sizeof(tmp[0]);
vector<int> aim;
for(int i=0; i<len; i++){
aim.push_back(tmp[i]);
}
cout<<"实现希尔排序 "<<endl<<endl;
cout<<"打印原数组: ";
PrintVector(aim, len);//打印
cout<<"打印希尔排序后的数组: ";
HillSort(aim, len);//希尔排序
PrintVector(aim, len);//打印矩阵
cout<<endl;
}
int main(){
TestHS();///实现希尔排序
system("pause");
return 0;
}
运行结果:
使用shell脚本实现希尔排序的源代码和运行示例 。
源代码如下:
1 #bin/bash
2
3 #arr=(49 38 65 97 76 13 27 49 55 4)
4 if [ $# -le 1 ];then
5 echo "please $0 [arr0] [arr1] ..."
6 exit
7 fi
8
9 len=0
10 for i in $@
11 do
12 arr[$len]=$i
13 ((len++))
14 done
15 echo "arr->${arr[*]}"
16 echo " "
17
18 i=0
19 grap=$len
20 while [ $grap -gt 1 ]
21 do
22 grap=$(( grap/3+1 ))
23 for(( i=0; i<($len-$grap); i++ ))
24 do
25 j=$i
26 tmp=${arr[$i+$grap]}
27 while [ $j -ge 0 ]&&[ ${arr[$j]} -gt ${arr[$j+$grap]} ]
28 do
29 arr[$j+$grap]=${arr[$j]}
30 arr[$j]=$tmp
31 j=$((j-grap))
32 done
33 #echo ${arr[*]}
34 done
35 done
36 echo "hillsort->${arr[*]}"
~
代码截图
建议大家自己敲一敲上面这段代码,个人觉得写的不够简洁。^_^
运行结果:
分享如上,如有错误,望斧正!愿大家学得开心,共同进步!