当前位置: 首页 > web >正文

程序设计实践--排序(1)

1、插入排序(一个数组)

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int a[N];
int n;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){int v=a[i];int j=i-1;while(j>=1&&a[j]>v){a[j+1]=a[j];j--;}a[j+1]=v;printf("第%d轮插入排序的结果为",i);for(int k=1;k<=n;k++){printf(" %d",a[k]);}printf("\n");}return 0;
}

2、插入排序(两个数组)

#include<bits/stdc++.h>
using namespace std;
int n;
int a[15];//原数组
int b[15];//新数组
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int len=0;//新数组的当前长度for(int i=1;i<=n;i++){int v=a[i];int j=len-1;while(j>=0&&b[j]>v){b[j+1]=b[j];j--;}b[j+1]=v;len++;printf("第%d轮插入排序的结果为",i);for(int k=0;k<len;k++){printf(" %d",b[k]);}cout<<endl;}return 0;
}

3、堆排序

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int a[N];
int n;
void display2(int s){for(int i=0;i<n;i++){if(i==n-1){cout<<a[i]<<endl;}else{cout<<a[i]<<" ";}}
}
void display3(int u,int v){int lar=u;int left=2*u+1;int right=2*u+2;if(left<v&&a[left]>a[lar]){lar=left;}if(right<v&&a[right]>a[lar]){lar=right;}if(lar!=u){swap(a[u],a[lar]);display3(lar,v);}
}
void display1(){for(int i=n/2-1;i>=0;i--){display3(i,n);}
}
int main(){cin>>n;for(int i=0;i<n;i++){cin>>a[i];}//构建初始堆display1();display2(n);for(int i=n-1;i>0;i--){swap(a[0],a[i]);display3(0,i);display2(n);}return 0;
}

4、排序(快速排序算法)

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n,m;
void QuickSort(int s,int t){int i=s,j=t;int tmp=a[(i+j)/2];while(i<=j){while(a[j]>tmp)j--;while(a[i]<tmp)i++;if(i<=j){swap(a[i],a[j]);i++,j--;}}if(s<j)QuickSort(s,j);if(i<t)QuickSort(i,t);
}
int main(){cin>>m;while(m--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}QuickSort(1,n);for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl;}return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n, m;// 随机选择基准值并分区
int Position(int s, int t) {// 随机选择一个位置与s交换srand(time(NULL));int pos = s + rand() % (t - s + 1);swap(a[s], a[pos]);int i = s, j = t;int tmp = a[s];while (i < j) {while (j > i && a[j] > tmp) j--;a[i] = a[j];while (i < j && a[i] < tmp) i++;a[j] = a[i];}a[i] = tmp;return i;
}// 快速排序主函数
void QuickSort(int s, int t) {if (s < t) {int i = Position(s, t);QuickSort(s, i-1);QuickSort(i+1, t);}
}int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> m;for (int j = 1; j <= m; j++) {cin >> a[j];}QuickSort(1, m);for (int j = 1; j <= m; j++) {cout << a[j] << " ";}cout << endl;}return 0;
}

5、幂(东莞2014初赛第3题)

#include<bits/stdc++.h>
using namespace std;
int a[50];
int k;
int n;
int main(){cin>>n;while(n){a[k]=n%2;n=n/2;k++;}k=k-1;for(int i=k;i>=0;i--){if(a[i]){cout<<2<<" "<<i<<"\n";}}return 0;
}

6、朗读比赛(东莞2010第2题)

#include<bits/stdc++.h>
using namespace std;
int n,s,t,r;
int main() {cin>>n;//s是速度,t是朗读时间,r是休息时间cin>>s>>t>>r;int a=s*t;int b=t+r;int c=n/a;int d=n%a;int e=c*b;if(d>0){int f=(d+s-1)/s;e+=f;}else{e-=r;}cout<<e<<endl;return 0;
}

7、归并排序

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int b[N];  // 临时数组,用于合并
int n;// 合并两个有序子数组
void Merge(int le, int ri, int mid) {int i = le, j = mid + 1;int k = le;// 比较两个子数组的元素,按顺序放入临时数组bwhile (i <= mid && j <= ri) {if (a[i] < a[j]) {b[k++] = a[i++];} else {b[k++] = a[j++];}}// 处理剩余元素while (i <= mid) b[k++] = a[i++];while (j <= ri) b[k++] = a[j++];// 将临时数组b中的有序元素复制回原数组afor (int i = le; i <= ri; i++) {a[i] = b[i];}
}// 归并排序主函数
void MergeSort(int le, int ri) {if (le < ri) {int mid = (le + ri) / 2;MergeSort(le, mid);      // 递归排序左半部分MergeSort(mid + 1, ri);  // 递归排序右半部分Merge(le, ri, mid);      // 合并两个有序部分}
}int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}MergeSort(1, n);for (int i = 1; i <= n; i++) {cout << a[i] << " ";}cout << endl;return 0;
}

8、统计工龄

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int a[N];
int n,m;
int main() {cin>>n;for(int i=1;i<=n;i++){cin>>m;a[m]++;}for(int i=0;i<=50;i++){if(a[i]){cout<<i<<":"<<a[i]<<endl;}}return 0;
}

9、月饼

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
struct node{double u;double v;
}a[N];
int n,m;
bool cmp(node b1,node b2){return b1.v*b2.u>b2.v*b1.u;	
}
int main() {cin>>n>>m;double sum=0;for(int i=0;i<n;i++){cin>>a[i].u;}for(int i=0;i<n;i++){cin>>a[i].v;}sort(a,a+n,cmp);for(int i=0;i<n;i++){if(a[i].u<m){m-=a[i].u;sum+=a[i].v;}else{sum+=m*a[i].v/a[i].u;m=0;break;}}cout<<fixed<<setprecision(2)<<sum<<endl;return 0;
}

http://www.xdnf.cn/news/7663.html

相关文章:

  • MySQL底层专题之索引数据结构和存储引擎
  • JVM-运行时数据区
  • 飞桨paddle ‘ParallelEnv‘ object has no attribute ‘_device_id‘【已解决】
  • 【MySQL】03.库操作与表操作
  • 大模型的说谎行为
  • Python _day31
  • 在 Win 10 上,Tcl/Tk 脚本2个示例
  • 《算法笔记》11.8小节——动态规划专题->总结 问题 B: 拦截导弹
  • 【数据结构 -- AVL树】用golang实现AVL树
  • 中间件-seata
  • 在innovus中如何设置让信号线打上双孔
  • DEBUG:Lombok 失效
  • Java转Go日记(四十三):Gorm事务
  • Maven 项目打包时添加本地 Jar 包
  • DAY28 超大力王爱学Python
  • CYT4BB Dual Bank 1 - 存储机制
  • t检验详解:原理、类型与应用指南
  • 什么是物联网 (IoT):2024 年物联网概述
  • 使用Mathematica绘制一类矩阵的特征值图像
  • Spring AI 介绍
  • BYUCTF 2025
  • JS 中 var、let、const 的区别联系
  • Unity入门学习(四)3D数学(4)之四元数Quaternion
  • Qt动态生成 UI
  • 动易私有知识库解决方案技术解析
  • 如何在WordPress网站上添加即时聊天功能
  • 游戏开发实战(三):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
  • 25.5.20学习总结
  • 算法与数据结构:质数、互质判定和裴蜀定理
  • Android 蓝牙开发 - 蓝牙相关权限(蓝牙基本权限、Android 12 蓝牙新增权限、位置权限)