希尔排序折半法、快速排序
希尔排序折半法
设定一个元素间隔增量gap,将参加排序的序列按这个间隔分成若干个子序列,对子序列用一般排序法排序
由于采用折半法,gap初始值为长度。
void half_shell_sort(int *a,int n)
{
int flag,gap = n,t,i,j;
while(gap > 1)
{
gap /= 2;
do
{
flag = 0;
for (i = 0; i < n-gap; i++)
{
j = i + gap;
if(a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
flag = 1;
}
}
}while(flag != 0);
}
}
快速排序
先设定一个基准值,然后将大于和小于基准值的数分别放于基准值两侧。然后将基准值两侧的数做相同的处理,直到划分的元素为1。
void quick_sort(int left,int right,int *a)
{
if(left >= right)
{
return;
}
int i = left;
int j = right;
int key = a[left];
while(i < j)
{
while(i < j && key <= a[j])
{
j--;
}
a[i] = a[j];
while(i < j && key >= a[i])
{
i++;
}
a[j] = a[i];
}
a[i] = key;
quick_sort(left,i-1,a);
quick_sort(i+1,right,a);
}