标签:include using index ++ i+1 思想 name 分组 main
#include<iostream>
using namespace std;
void swap(int &a ,int &b){
int temp;
temp = a ;
a = b;
b = temp;
}
void bubblesort(int a[],int n)
{
int i,j;
int temp;
for(i=n-1;i>=0;i--)
{
for(j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
//交换 冒泡排序的思想,就是从前到后两个两个比较,每次把最大的交换在最后,一次遍历后,最后一位就是最大的有序数
swap(a[j],a[j+1]);
}
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
}
//选择排序(一一比较,选择出最大最小的数,类似于冒泡排序(减少了交换))
void selectsort(int a[],int n)
{
int i,j,min;
for(i=0;i<n;i++)
{
min = i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
{
min = j;
}
}
if(i!=min)
{
swap(a[i],a[min]);
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
}
void insertsort(int a[],int n)
{
//插入排序,类似于扑克牌,默认第一个数是有序的,插入新的数,放在排好序列的位置;
int preindex,i,current;
for(i=1;i<n;i++)//默认第一个数是有序的
{
preindex = i-1;
current = a[i];
while(preindex>=0&&a[preindex]>current)
{
a[preindex+1] = a[preindex];
preindex--;
//preindex--;一直到-1的时候条件终止; preindex+1表示空的位置,需要插入的位置
}
a[preindex+1] = current;
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
}
void swapInt(int * a,int*b)
{
int c=*a;
*a=*b;
*b=c;
}
void shell(int*data,int len)
{
if(len<=1||data==NULL)
return;
for(int div=len/2;div>=1;div=div/2)//定增量div,并不断减小
{
for(int i=0;i<=div;++i)//分组成div组
{
for(int j=i;j<len-div;j+=div)//对每组进行插入排序
for(int k=j;k<len;k+=div)
if(data[j]>data[k])
swapInt(data+j,data+k);//交换两个数的值
}
}
for(int i=0;i<len;i++)
cout<<data[i]<<" ";
}
int main(void)
{
int a[10]={10,9,8,7,6,5,4,3,2,1};
//bubblesort(a,10);
//selectsort(a,10);
//insertsort(a,10);
shell(a,10);
return 0;
}
标签:include using index ++ i+1 思想 name 分组 main
原文地址:https://www.cnblogs.com/love-life-insist/p/9063659.html