您的位置:首页 > 其它

关于排序的几种算法

2017-03-31 21:48 295 查看

直接插入排序数组从1开始

#include<stdio.h>
#define N 10
void InsertSort(int r[],int n)
{
for ( int i=2;i<=n;++i)

if (r[i]<r[i-1])
{
r[0]=r[i];
r[i]=r[i-1];
for (int j=i-2;r[0]<r[j];--j)
r[j+1]=r[j];
r[j+1]=r[0];
}

};
void main ()
{
int r
={1,5,9,8,6,0,3,2,7,10};
int i,n=10;
InsertSort(r,10);
for (i=1;i<n;i++)
printf("%d ",r[i]);
}

从0开始对数组进行排序简便算法

# include <stdio.h>
# define N 10

void sort(int arr[], int size)
{
int i, j, temp;
for(i = 0; i < N; ++i)
{
temp = arr[i];
for(j = i-1; j>=0 && temp<arr[j]; --j)
{
arr[j+1] = arr[j];
}
arr[j+1] = temp; //
}
}

void show(int arr[], int size)
{
int i;
for( i = 0; i < N; ++i )
{
printf("%d ", arr[i]);
}
putchar('\n');
}

int main(void)
{
int array
= {73, 22, 93, 43, 55, 14, 28, 65, 39, 81};
sort(array, N);
show(array, N);

return 0;
}

归并排序算法

#include<stdio.h>
#include<math.h>
# define num 10
void merge(int sr[],int tr[] ,int i,int m,int n)
{
int j,k;
for( j=m+1, k=i ; i<=m && j<=n; ++k)
if( sr[i]<sr[j] )
tr[k]=sr[i++];
else
tr[k]=sr[j++];
while(i<=m)
tr[k++]=sr[i++];
while(j<=n)
tr[k++]=sr[j++];
}

void msort( int sr[], int tr[], int i, int n)
{
if(i==n)
tr[i]=sr[i];
else
{ int m;
int tr2[num];
m=(i+n)/2;
msort(sr,tr2,i,m);
msort(sr,tr2,m+1,n);
merge(tr2,tr,i,m,n);
}
}

void main ()
{ int sr[10]={0,49,32,19,23,67,81,36,12,9};
int tr[10];
int n=num-1;
int i=1;
for( int j=1; j<=n;j++)
printf("%3d",sr[j]);
printf("\n");
msort(sr,tr,i,n);
for(j=1;j<=n;j++)
printf("%3d",tr[j]);
}

快速排序

#include<stdio.h>
#define N 8
int Partition (int r[],int low,int high)
{
r[0]=r[low];
int pivokey=r[low];
while(low<high)
{ while(low<high && r[high]>=pivokey) //将记录小的记录移到低端//
--high;
r[low]=r[high];

while(low<high && r[low]<=r[high] ) //将记录大的记录移到高端//
++low;
r[high]=r[low];
}
r[low]=r[0];
return low;
}

void Qsort (int r[],int low,int high)
{ if (low<high){
int pivotloc=Partition( r , low , high );
Qsort( r , low , pivotloc-1);
Qsort( r , pivotloc+1 ,high );
}
}

void QuickSort (int r[])
{
Qsort(r,0,N);
}

void main ()
{
int r
={49,38,65,97,76,13,27};
int i;

QuickSort (r);
for (i=0;i<N;i++)
printf("%d ",r[i]);
printf("\n");
}

冒泡排序法

#include<stdio.h>
#define N 10

void main ()
{
int i,j,t,n;
int a
;//定义一个数组//
printf("请输入元素的个数:\n");
scanf("%d",&n);
printf("请输入n个整数:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for( i=0 ; i< n-1 ; i++ )
{
//a[i]与其前后所有元素比较,若a[j]<a[i],则交换//
for ( j = i+1 ; j < n ; j++)
if( a[i] > a[j] )
{
t=a[i];a[i]=a[j];a[j]=t;
}

}
printf("排序后: \n");
for ( i=0 ; i<n ; i++ ) //输出n个数组元素的值//
printf(" %d ",a[i]);
printf("\n");

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