排序算法总结
2007-06-06 14:11
399 查看
排序算法总结下,以便查找:
一.冒泡
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; }
}
二选择排序
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;
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;
[b] }
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;
}
(2) void QuickSort(char *a[], int left, int right){
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);
if(left<max) QuickSort(a,left,max);if(right > min) QuickSort(a,min,right);}
[/b]
一.冒泡
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; }
}
二选择排序
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;
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;
[b] }
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;
}
(2) void QuickSort(char *a[], int left, int right){
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);
if(left<max) QuickSort(a,left,max);if(right > min) QuickSort(a,min,right);}
[/b]