关于排序的几种算法


直接插入排序数组从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"); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值