鱼C论坛

 找回密码
 立即注册
查看: 516|回复: 3

[技术交流] 排序算法合集(更新中)

[复制链接]
发表于 2023-7-20 16:59:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 香蕉那个不拿拿 于 2023-7-21 14:58 编辑

已实现插入排序和选择排序,冒泡,计数,快速排序
  1. #include<iostream>
  2. using namespace std;
  3. int carr[1000000][3];
  4. int kuaisu (int arr[1000],int n){
  5.         int max = 0;
  6.         for (int i = 1;i<=n;i++){
  7.                 if (arr[i] > max){
  8.                         max = arr[i];
  9.                 }
  10.         }
  11.         int jizhun =arr[1];
  12.         int count1=0,count2=0,arr1[999],arr2[999];
  13.         if (n == 1 ||n==0){
  14.                 if (n == 1){
  15.                         return arr[1];
  16.                 }       
  17.         }
  18.         for (int i = 1;i <= n;i++){
  19.                 if (arr[i]<=jizhun){
  20.                         count1++;
  21.                         arr1[count1] = arr[i];
  22.                        
  23.                 }
  24.                 else if (arr[i] >jizhun){
  25.                         count2++;
  26.                         arr2[count2] = arr[i];
  27.                        
  28.                 }
  29.         }
  30.         if (count1 != 0){
  31.                 kuaisu(arr1,count1);
  32.         }
  33.         if (count2 !=0){
  34.        
  35.                 kuaisu(arr2,count2);
  36.         }
  37.         for (int i = 1;i<=n;i++){
  38.                 if (i <=count1){
  39.                         arr[i] = arr1[i];
  40.                 }
  41.                 else{
  42.                         arr[i] = arr2[i - count1];
  43.                 }
  44.         }
  45. }

  46. int main(){
  47.         int arr[1000],n,temp;
  48.         cin>>n;
  49.         for (int i = 1;i <=n;i++){
  50.                 cin>>arr[i];       
  51.         }
  52.         string nb;
  53.         cout<<"请选择排序方法"<<endl;
  54.         cin>>nb;

  55.         if (nb == "插入排序"){
  56.                 for (int i = 2;i <= n;i++){
  57.                         for (int j = i-1;j>=0;j--){
  58.                                 if (arr[i] > arr[j]){
  59.                                         temp = arr[i];
  60.                                         for (int k = i - 1;k >j;k--){
  61.                                                 arr[k+1] = arr[k];
  62.                                         }
  63.                                         arr[j+1] = temp;
  64.                                         break;
  65.                                 }
  66.                         }
  67.                 }
  68.         }
  69.         else if (nb == "选择排序"){
  70.                 long long less = 1000000000000000;
  71.                 int less_j;
  72.                 for (int i = 0;i<n;i++){
  73.                         for (int j = i + 1;j <=n;j++){
  74.                                 if (arr[j] < less){
  75.                                         less = arr[j];
  76.                                         less_j = j;
  77.                                 }
  78.        
  79.                         }
  80.                         swap(arr[less_j],arr[i+1]);
  81.                         less = 1000000000000000;
  82.                 }

  83.         }
  84.         else if (nb == "冒泡排序"){
  85.                 for (int i = n;i  >= 1;i--){
  86.                         for (int j = 1; j < i; j++){
  87.                                 if (arr[j] > arr[j + 1]){
  88.                                         swap (arr[j],arr[j+1]);
  89.                                 }
  90.                         }
  91.                 }
  92.         }
  93.         else if (nb == "计数排序"){

  94.                 int max,less,count;
  95.                 count = 1;
  96.                 cout<<"请输入最大最小值"<<endl;
  97.                 cin>>max>>less;
  98.                 for (int i = 1;i <= n ;i++){
  99.                         carr[arr[i] - less + 1][1] = arr[i];
  100.                         carr[arr[i] - less + 1][2] += 1;
  101.                 }
  102.                 for (int i = 1;i <= max; i++){
  103.                         for (int j = carr[i][2];j >= 1;j--){
  104.                                 arr[count] = carr[i][1];
  105.                                 count++;
  106.                         }
  107.                 }
  108.                
  109.         }
  110.         else if (nb == "快速排序"){       
  111.                 kuaisu(arr,n);
  112.         }
  113.         for (int i = 1; i<=n;i++){
  114.                 cout<<arr[i]<<" ";
  115.         }
  116. }
复制代码

推荐网站https://visualgo.net/en
捕获.PNG
一个动画演示各种算法的平台

评分

参与人数 1荣誉 +3 收起 理由
zhangjinxuan + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 17:38:38 | 显示全部楼层
支持!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-20 17:39:46 | 显示全部楼层

每天进步一点点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-21 14:59:03 | 显示全部楼层
代码破120!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 22:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表