1035. 插入与归并
来源:互联网 发布:什么时候开放网络购彩 编辑:程序博客网 时间:2024/06/05 04:24
排序算法忘完了。。。。百度了一下详细的插入和归并排序过程。。。然后参考的网上的代码。。。
#include<stdio.h>#include<stdlib.h>int cmp ( const void *p1 , const void *p2 ){ return *( int *)p1 - *( int *)p2 ;}int main ( ){ int N , a[ 100 ] , b[ 100 ] , i , j , k ; scanf("%d",&N); for ( i = 0 ; i < N ; i ++ ) scanf("%d",&a[ i ] ) ; for ( i = 0 ; i < N ; i ++ ) scanf("%d",&b[ i ] ) ; for ( i = 0 ; b[ i ] <= b[ i+1 ] && i < N-1 ; i++ ) ; //找到开始无序的那个下标 for ( j = ++i ; a[ j ] == b[ j ] && j < N ; j ++ ) ; //从开始无序的那个下标开始判断后面是否没变 if ( j == N ) //前半部分有序,后半部分无改动则是插入排序 { printf("Insertion Sort\n"); qsort( a , i+1 , sizeof ( int ) , cmp ); //排序的长度不是N } else { printf("Merge Sort\n"); //从最开始序列开始一步一步归并,直至和中间序列相同(第一个for循环),再进行下一步归并 for ( j = 1, i = 0 ; i < N && j <= N ; j *= 2 ) { for ( i = 0 ; i < N && a[ i ] == b[ i ] ; i ++ ) ; //如果i=N,直接跳出,也就是说已经迭代过得序列和原序列相同,根据题意那就不用再排序了说明是有序序列 for ( k = 0 ; k < N / j ; k ++ ) //N/j表示有几对有j个元素的序列 qsort( a + k*j , j , sizeof ( int ) , cmp ); qsort( a + k*j , N%j , sizeof ( int ) , cmp ); //对非偶数序列的最后一项排序 } } for ( i = 0 ; i < N-1 ; i ++) printf("%d ",a[ i ] ); printf("%d",a[ N-1 ] ); return 0;}
阅读全文
0 0
- 1035. 插入与归并
- 1035. 插入与归并
- 1035. 插入与归并
- 1035. 插入与归并
- 1035. 插入与归并
- 1035. 插入与归并
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 8.12 俄罗斯方块 1863
- XZ_iOS之异步裁切绘制圆角图形
- 网页以FTP方式发布到Server的粗略过程
- 阿里云部署Java web的步骤
- Adaboost算法
- 1035. 插入与归并
- 栈的实现和基本操作
- cad转出高清图片的方法。分享
- String painter HDU
- 机器学习基石 7.4 Interpreting VC Dimension
- spring创建对象的几种方式
- tomcat 运行慢解决方案汇总
- 机器学习基础及框架
- Page Count