#include <stdio.h>
void
printf_array(int *array,int len)
{
int i=0;
for(i =0;i<len;i++)
{
printf("%d ",*(array+i) );
//printf("%d ",array[i] );
}
printf("\n");
}
void swap_array(int *array,int i,int
k)
{
int temp = *(array+i);
*(array+i) = *(array+k);
*(array+k) = temp;
}
void InsertSort(int *array,int
len)//O(n*n)
{
int i=0,j=0;
int k = -1;
int temp=-1;
for(i=1;i<len;i++)
{
k=i;
temp = *(array+k);
for(j=i-1;(j>=0)&&(*(array+j)
> temp);j--)
{
*(array+j+1) = *(array+j);
k =
j;
}
*(array+k) =temp;
}
}
void SelectSort(int *array,int
len)//O(n*n)
{
int i=0,j=0;
int k = -1;
for(i=0;i<len;i++)
{
k=i;
for(j=i;j<len;j++)
{
if( *(array+j) < *(array+k)
)
k = j;
}
swap_array(array,i,k);//找出最小的然后和有序的最后的替换
}
}
void BubblSort(int *array,int len)
{
int i=0;
int j=0;
int exchange=1;
for(i=0;i<len
&& exchange;i++)
{
exchange = 0;
for(j=len-1;j>i;j--)
{
if(*(array+j-1)
> *(array+j)
)//如果有逆序,则交换,并记录
{
swap_array(array,j-1,j);
exchange = 1;
}
}
}
printf("exchange times %d\n",i);
}
void ShellSort(int *array,int
len)//O(n*n)
{
int i=0,j=0;
int k = -1,gap;
int temp =-1;
gap = len;
do
{
gap = gap/3+1;//
一般取的是3
for(i=gap;i<len;i+=gap)//当最终gap=1;就是插入排序了
{
k=i;
temp = *(array+k);
for(j=i-gap;(j>=0)&&(*(array+j)
> temp);j-=gap)
{
*(array+j+gap) =
*(array+j);
k = j;
}
*(array+k) =temp;
}
}while(gap
> 1);
}
int partition(int *array,int low,int high
)
{
int pv;
pv = *(array+low);
while(low < high)
{
//先从高的比较,这个
while((low<high)
&& (*(array+high) >=
pv))//>=升序排序
{
high--;
}
swap_array(array,low,high);
while((low
<high) &&(
*(array+low) <= pv ))
{
low++;
}
swap_array(array,low,high);
}
return low;
}
int count;
void QSort(int *array,int low,int high)
{
if(low < high)
{
int pivot =
partition(array,low,high);//每划分一次,就把该元素该留的位置确定了。
count++;
printf("count is %d
-->%d\n",count,pivot);
QSort(array,low,pivot-1);
QSort(array,pivot+1,high);
}
}
void QuickSort(int *array,int len)
{
QSort(array,0,len-1);
}
int main(void )
{
int array[]={21,25,49,25,16,8};
int len = sizeof(array) /
sizeof(*array);
//SelectSort(&array[0],len);
printf("%d\n",len);
//InsertSort(array,len);
//BubblSort(array,len);
//ShellSort(array,len);
QuickSort(array,len);
printf_array(&array[0],len);
while(1);
return 0;
}
转发至微博
转发至微博