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

程序设计实践--排序(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;
}

相关文章:

  • AI无法解决的Bug系列(一)跨时区日期过滤问题
  • JAVA EE(进阶)_HTML
  • SpringCloud+Vue实现大文件分片下载(支持开始、暂停、继续、取消)
  • 云原生攻防3(Docker常见攻击方式)
  • 2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
  • 服务器数据恢复—Linux系统服务器崩溃且重装系统的数据恢复案例
  • 学习黑客数据小包的TLS冒险之旅
  • PHP、JAVA、Shiro反序列化
  • 云原生主要架构模式
  • java云原生实战之graalvm 环境安装
  • 考研系列-408真题计算机组成原理篇(2015-2019)
  • C++ QT 与 win32 窗口可以互操作
  • 创建thinkphp项目并配置数据库
  • 微服务架构中的多进程通信--内存池、共享内存、socket
  • Java期末总复习 编程题(偏基础)
  • Python数据可视化再探——Matplotlib模块 之一
  • Unity入门学习(四)3D数学(4)之四元数Quaternion
  • python新手学习笔记①
  • Vue2到Vue3迁移问题解析
  • uniapp-商城-63-后台 商品列表(分类展示商品的删除)
  • 受工友诱骗为获好处费代购免税品,海口海关:两当事人被立案
  • 新华社原香港分社副社长、深圳市委原副书记秦文俊逝世
  • 牛市早报|年内首次存款利率下调启动,5月LPR今公布
  • 黄仁勋:新一代计算平台GB300三季度上市,AI计算能力每十年提升100万倍
  • 两名游客刻划八达岭长城,被拘5日罚200元
  • 上海肺科医院院长陈昶:临床中的痛点,正是新技术诞生的起点