关于排序的几种算法
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");
}
相关文章推荐
- 关于排序(冒泡、选择、插入、快速)的几种算法
- 排序的几种算法
- 【转】几种基本的排序算法演示
- 教你几种排序的基本算法
- 关于利用STL中的sort算法对向量等容器进行排序的问题
- 关于f(n)=n的几种算法
- 几种常见的排序算法之比较
- 关于几种排序的结题报告
- 关于几种压缩算法以及hadoop和hbase中的压缩配置说明
- 关于几种压缩算法以及hadoop和hbase中的压缩配置说明
- java排序算法,排序都有哪几种算法?
- 基础算法学习(一)__几种排序:选择、插入、冒泡和快排
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- 教你几种排序的基本算法
- 【转】几种常见的排序算法之比较
- 一到关于数组排序的算法题
- 关于f(n)=n的几种算法
- 关于进销存软件中的几种算法
- java算法3(关于递归的算法和数组的排序)