快速排序+希尔插入排序
#include<iostream>
using namespace std;
void shellsort(int a[], int n)
{ int j, gap;
for (gap = n / 2; gap > 0; gap /= 2) //每次步数/2直到除为1
for (j = gap; j < n; j++) //这里j的初始值是挨个取,用下边的插入排序可以直接跟本组前面的比较
if (a[j] < a[j - gap])
{
int temp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > temp) //找到合适的位置
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp; //插入
}
}
void quicksort(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j) //如果合适
{s[i++] = s[j];} //将那个数换到i指针上,然后再
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quicksort(s, l, i - 1);
quicksort(s, i + 1, r);
}
}
void Bubblesort(int a[],int n)
{
for(int i=0;i<n;i++)
for(int j=1;j<n-i;j++)
{
if(a[j]<a[j-1])
{
int tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
int main()
{ int a[100],b[100],c[100];//用于shell,快速,冒泡排序的数组
int n;
cout<<"数组大小和值";
cin>>n;
for(int i=0;i<n;i++)
{cin>>a[i];b[i]=a[i];c[i]=a[i];}
shellsort(a,n);
cout<<"希尔排序";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
quicksort(b,0,n-1);
cout<<"快速排序";
for(int i=0;i<n;i++)
cout<<b[i]<<" ";
cout<<endl;
Bubblesort(c,n);
cout<<"冒泡排序";
for(int i=0;i<n;i++)
cout<<c[i]<<" ";
cout<<endl;
return 0;
}