您的位置:首页 > 其它

排序算法总结

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: