排序算法总结下,以便查找:
void SelectSort(int a[], int n)
{ int i,j,tmp;
int min;
int count=0;
printf("initial sorting:");
PrintArray(a,n);
for(i=0;i<n-1;i++)
{ min=i;
void QuickSort ( int list[], int left,int right )
{
//在待排序区间 left?right 中递归地进行快速排序
if ( left < right) {
int pivotpos = Partition ( list, left, right ); //划分
QuickSort ( list, left, pivotpos-1);
//在左子区间递归进行快速排序
QuickSort ( list, pivotpos+1, right );
//在左子区间递归进行快速排序
}
}
if(left<max)
QuickSort(a,left,max);
if(right > min)
QuickSort(a,min,right);
}
一.冒泡
void BubbleSort(int a[], int n)
{ int i,j,tmp;
int flag;,
int count = 0;
printf("initial sorting:");
PrintArray(a,n);
for(i=0; i<n-1; i++)
{flag = 0;
for(j=0; j<n-i-1; j++)
{ if(a[j] > a[j+1])
{tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
flag = 1;
}
}
count++;
printf("after %d sorting:",count);
PrintArray(a,n);
if(flag == 0)return;
}
}
二选择排序
for(j=i;j<n;j++)
{ if(a[j]<a[min])
min=j;
}
if(min!=i)
{
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
count++;
printf("after %d sorting:",count);
PrintArray(a,n);
}
}
三插入排序
printf("initial sorting:");
PrintArray(a,n);
for (i=1;i<n;i++)
{tmp=a[i];
for(j=i-1;(j>=0)&&(tmp<a[j]);j--)
a[j+1]=tmp;
printf("after %d sorting:",i);
PrintArray(a,i+1);
}
}
void InsertSort(int a[],int n)
{int i,j,tmp;
a[j+1]=a[j];
四希尔排序
for(k=0;k<count;k++)
{ gap=gap/2;
void shell(int count,int a[])
{
int i,j,gap=count,k,x;
{x=a[i];
for(j=i-gap;(x<a[j])&&(j>=0);j=j-gap)
a[j+gap]=a[j];
a[j+gap]=x;
}
if (gap==0) break;
printf("gap=%d:/n",gap);
PrintArray(a,count);
}
}
for(i=gap;i<count;++i)
五快排
(1)
void QuickSort ( int list[], int left,int right )
{
//在待排序区间 left?right 中递归地进行快速排序
if ( left < right) {
int pivotpos = Partition ( list, left, right ); //划分
QuickSort ( list, left, pivotpos-1);
//在左子区间递归进行快速排序
QuickSort ( list, pivotpos+1, right );
//在左子区间递归进行快速排序
}
}
int Partition ( int list[],int low,const int high )
{
int pos = low; //基准位置
int pivot = list[low];
for ( int i = low+1; i <= high; i++ )
if ( list[i]< pivot && ++pos != i )
Swap ( list[pos], list.Vector[i] );
//小于基准对象的交换到区间的左侧去
Swap ( list[low], list[tpos] );
return pos;
}
{
int pos = low; //基准位置
int pivot = list[low];
for ( int i = low+1; i <= high; i++ )
if ( list[i]< pivot && ++pos != i )
Swap ( list[pos], list.Vector[i] );
//小于基准对象的交换到区间的左侧去
Swap ( list[low], list[tpos] );
return pos;
}
int min,max;
char *norm, *tmp;
min = left;
max = right;
norm=a[(left+right)/2];
do
{while(strcmp(a[min],norm)<0&& min<right)
min++;
while(strcmp(a[max],norm)>0 && max>left)
max--;
if(min<=max)
{ tmp=a[min]; a[min]=a[max]; a[max]=tmp;
min++;
max--;
}
}while(min<=max);
(2)
void QuickSort(char *a[], int left, int right)
{