直接插入排序数组从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[N]={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[N] = {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[N]={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[N];//定义一个数组//
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");
}