數據結構之內部排序

目錄

7-1 直接插入排序

輸入格式:

輸出格式:

輸入樣例:

輸出樣例:

7-2 尋找大富翁

輸入格式:

輸出格式:

輸入樣例:

輸出樣例:

7-3 PAT排名匯總

輸入格式:

輸出格式:

輸入樣例:

輸出樣例:

7-4 點贊狂魔

輸入格式:

輸出格式:

輸入樣例:

輸出樣例:

7-5 鏈式基數排序

輸入樣例:

輸出樣例:


7-1 直接插入排序

分數 10

全屏瀏覽題目

切換布局

作者?黃龍軍

單位?紹興文理學院

給定一個整數序列,請按非遞減序輸出采用直接插入排序的各趟排序后的結果。

輸入格式:

測試數據有多組,處理到文件尾。每組測試數據第一行輸入一個整數n(1≤n≤100),第二行輸入n個整數。

輸出格式:

對于每組測試,輸出若干行,每行是一趟排序后的結果,每行的每兩個數據之間留一個空格。

輸入樣例:

4
8 7 2 1

輸出樣例:

7 8 2 1
2 7 8 1
1 2 7 8

?

#include <stdio.h>
#define MaxSize 1000
struct SqList {int r[MaxSize + 1];int length;
};
void Read(struct SqList *L, int n) {L->length = n;for (int i = 1; i <= L->length; i++) {scanf("%d", &L->r[i]);}
}
void Print(struct SqList *L) {for (int i = 1; i <= L->length; i++) {if (i > 1) printf(" ");printf("%d", L->r[i]);}printf("\n");
}
void InsertSort(struct SqList *L) {for (int i = 2; i <= L->length; i++) {if (L->r[i] < L->r[i - 1]) {L->r[0] = L->r[i];int j;for (j = i - 1; L->r[0] < L->r[j]; j--)L->r[j + 1] = L->r[j];L->r[j + 1] = L->r[0];}Print(L);}
}
int main() {int n;while (scanf("%d", &n) != EOF) {struct SqList L;Read(&L, n);InsertSort(&L);}return 0;
}

?

7-2 尋找大富翁

分數 25

全屏瀏覽題目

切換布局

作者?陳越

單位?浙江大學

胡潤研究院的調查顯示,截至2017年底,中國個人資產超過1億元的高凈值人群達15萬人。假設給出N個人的個人資產值,請快速找出資產排前M位的大富翁。

輸入格式:

輸入首先給出兩個正整數N(≤106)和M(≤10),其中N為總人數,M為需要找出的大富翁數;接下來一行給出N個人的個人資產值,以百萬元為單位,為不超過長整型范圍的整數。數字間以空格分隔。

輸出格式:

在一行內按非遞增順序輸出資產排前M位的大富翁的個人資產值。數字間以空格分隔,但結尾不得有多余空格。

輸入樣例:

8 3
8 12 7 3 20 9 5 18

輸出樣例:

20 18 12
#include<stdio.h>
int main(){int n,m;int a[1000000];scanf("%d %d",&n,&m);for(int i=0;i<n;i++){scanf("%d",&a[i]);}int flag=0;int t;for(int p=n-1;p>=0;p--){flag=0;for(int i=0;i<p;i++){if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;flag=1;}}if(flag==0) break;}if(m>n){for(int i=n-1;i>=1;i--){printf("%d ",a[i]);}printf("%d",a[0]);}else{for(int i=n-1;i>n-m;i--){printf("%d ",a[i]);}printf("%d",a[n-m]);}
}

7-3 PAT排名匯總

分數 25

全屏瀏覽題目

切換布局

作者?陳越

單位?浙江大學

計算機程序設計能力考試(Programming Ability Test,簡稱PAT)旨在通過統一組織的在線考試及自動評測方法客觀地評判考生的算法設計與程序設計實現能力,科學的評價計算機程序設計人才,為企業選拔人才提供參考標準(網址http://www.patest.cn)。

每次考試會在若干個不同的考點同時舉行,每個考點用局域網,產生本考點的成績。考試結束后,各個考點的成績將即刻匯總成一張總的排名表。

現在就請你寫一個程序自動歸并各個考點的成績并生成總排名表。

輸入格式:

輸入的第一行給出一個正整數N(≤100),代表考點總數。隨后給出N個考點的成績,格式為:首先一行給出正整數K(≤300),代表該考點的考生總數;隨后K行,每行給出1個考生的信息,包括考號(由13位整數字組成)和得分(為[0,100]區間內的整數),中間用空格分隔。

輸出格式:

首先在第一行里輸出考生總數。隨后輸出匯總的排名表,每個考生的信息占一行,順序為:考號、最終排名、考點編號、在該考點的排名。其中考點按輸入給出的順序從1到N編號。考生的輸出須按最終排名的非遞減順序輸出,獲得相同分數的考生應有相同名次,并按考號的遞增順序輸出。

輸入樣例:

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

輸出樣例:

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

?

#include <stdio.h>
struct stu
{char id[14];                //考號int score;                  //分數int kc;                     //考場
};
struct stu a[30000];
int bigger(const char *s1,const char *s2)
{for(int i=0;i<13;i++)if(s1[i] > s2[i])return 1;else if(s1[i] < s2[i])return 0;return 1;
}
void qsort(int l,int r)
{if(l >= r)return ;int i = l;int j = r;struct stu t = a[l];while(i != j){while(i < j && (a[j].score < t.score || a[j].score == t.score && bigger(a[j].id,t.id)))j--;while(i < j && (a[i].score > t.score || a[i].score == t.score && bigger(t.id,a[i].id)))i++;if(i < j){struct stu s = a[i];a[i] = a[j];a[j] = s;}}a[l] = a[i];a[i] = t;qsort(l,i-1);qsort(i+1,r);return ;
}
void Copy(int *b2,int *b1,int n)
{for(int i=1;i<=n;i++)b2[i] = b1[i];
}
int main()
{int n,j,i,top = 0;scanf("%d",&n);for(i=1;i<=n;i++){int k;scanf("%d",&k);for(j=0;j<k;j++){char id[14];int score;scanf("%s %d",id,&score);a[top].score = score;a[top].kc = i;strcpy(a[top].id,id);top++;}}qsort(0,top-1);int levall = 1,b1[n+1],b2[n+1],score = a[0].score;for(i=1;i<=n;i++)b1[i] = 1,b2[i] = 1;printf("%d\n",top);printf("%s %d %d %d\n",a[0].id,1,a[0].kc,1);int llevall = 1;            //上一個總排名levall = 2;                   //總排名Copy(b2,b1,n);b1[a[0].kc]++;	for(i=1;i<top;i++){if(a[i].score == a[i-1].score){printf("%s %d %d %d\n",a[i].id,llevall,a[i].kc,b2[a[i].kc]);levall++;b1[a[i].kc]++;}else{printf("%s %d %d %d\n",a[i].id,levall,a[i].kc,b1[a[i].kc]);llevall = levall;levall++;Copy(b2,b1,n);b1[a[i].kc]++;					//考場的排名 }}return 0;
}

?

7-4 點贊狂魔

分數 25

全屏瀏覽題目

切換布局

作者?陳越

單位?浙江大學

微博上有個“點贊”功能,你可以為你喜歡的博文點個贊表示支持。每篇博文都有一些刻畫其特性的標簽,而你點贊的博文的類型,也間接刻畫了你的特性。然而有這么一種人,他們會通過給自己看到的一切內容點贊來狂刷存在感,這種人就被稱為“點贊狂魔”。他們點贊的標簽非常分散,無法體現出明顯的特性。本題就要求你寫個程序,通過統計每個人點贊的不同標簽的數量,找出前3名點贊狂魔。

輸入格式:

輸入在第一行給出一個正整數N(≤100),是待統計的用戶數。隨后N行,每行列出一位用戶的點贊標簽。格式為“Name?K?F1??FK?”,其中Name是不超過8個英文小寫字母的非空用戶名,1≤K≤1000,Fi?(i=1,?,K)是特性標簽的編號,我們將所有特性標簽從 1 到?107?編號。數字間以空格分隔。

輸出格式:

統計每個人點贊的不同標簽的數量,找出數量最大的前3名,在一行中順序輸出他們的用戶名,其間以1個空格分隔,且行末不得有多余空格。如果有并列,則輸出標簽出現次數平均值最小的那個,題目保證這樣的用戶沒有并列。若不足3人,則用-補齊缺失,例如mike jenny -就表示只有2人。

輸入樣例:

5
bob 11 101 102 103 104 105 106 107 108 108 107 107
peter 8 1 2 3 4 3 2 5 1
chris 12 1 2 3 4 5 6 7 8 9 1 2 3
john 10 8 7 6 5 4 3 2 1 7 5
jack 9 6 7 8 9 10 11 12 13 14

輸出樣例:

jack chris john
#include<stdio.h>
typedef struct
{char name[20];int sum;   //不同標簽總數int num;    //點贊總數
}User;
int fact[100000000];
int main()
{int n,k;scanf("%d",&n);User users[100];int facter[100][1001];int i,j;for(i=0;i<n;i++){users[i].sum=0;scanf("%s",users[i].name);scanf("%d",&users[i].num);for(j=0;j<users[i].num;j++){scanf("%d",&facter[i][j]);fact[facter[i][j]]++;if(fact[facter[i][j]]==1)users[i].sum++;}for(j=0;j<users[i].num;j++) //重新歸0fact[facter[i][j]]=0;}//進行排序(這邊建議使用選擇排序)int max;for(i=0;i<n-1;i++){max=i;for(j=i+1;j<n;j++){if(users[max].sum<users[j].sum)max=j;else if(users[max].sum==users[j].sum&&users[max].num>users[j].num)max=j;}User t=users[i];users[i]=users[max];users[max]=t;}if(n<3){for(i=0;i<n-1;i++)printf("%s ",users[i].name);printf("%s",users[n-1].name);for(i=0;i<3-n;i++)printf(" -");}else{printf("%s %s %s",users[0].name,users[1].name,users[2].name);}return 0;
}

7-5 鏈式基數排序

分數 15

全屏瀏覽題目

切換布局

作者?王東

單位?貴州師范學院

實現鏈式基數排序,待排序關鍵字n滿足1≤n≤1000,最大關鍵字數位≤5。

輸入樣例:

第一行輸入待排序個數n(1≤n≤1000),再輸入n個數(n的數位≤5)。

10
278 109 63 930 589 184 505 269 8 83

輸出樣例:

輸出每趟分配-收集后鏈表中的關鍵字,趟數為序列中最大值的數位(如樣例中930的數位為3),每行結尾有空格。

930 63 83 184 505 278 8 109 589 269 
505 8 109 930 63 269 278 83 184 589 
8 63 83 109 184 269 278 505 589 930 
#include<stdio.h>
struct tong{int a[1000];int sum;//sum指的是存入桶中的數據個數
};
typedef struct tong tong;
int ad[1000];
int findmax(int n){int max=0;int t;int weishu=0;for(int i=0;i<n;i++){weishu=0;t=ad[i];while(t!=0){t=t/10;weishu++;}if(weishu>max)max=weishu;}return max;
}
int main(){int n;int t;tong ts[10];for(int i=0;i<10;i++)ts[i].sum=0;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&ad[i]);//接下來我們要找出最大位數int wei=findmax(n);for(int i=0;i<wei;i++){for(int j=0;j<n;j++){t=ad[j];t=t/pow(10,i);t=t%10;ts[t].a[ts[t].sum++]=ad[j];}//接下來取出桶中數據更新ad數組int n1=0;for(int j=0;j<10;j++){  //10個桶for(int k=0;k<ts[j].sum;k++){ad[n1++]=ts[j].a[k];}}//打印for(int j=0;j<n;j++){printf("%d ",ad[j]);}printf("\n");//進行桶的歸0for(int j=0;j<10;j++){//數組沒必要更新,反正會覆蓋ts[j].sum=0;}}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211694.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RabbitMQ在國內為什么沒有那么流行?

MQ&#xff08;消息隊列&#xff09;的世界。MQ&#xff0c;就像是一個巨大的郵局&#xff0c;負責在不同服務或應用間傳遞消息。它可以幫助我們解耦系統&#xff0c;提高性能&#xff0c;還能做到異步處理和流量削峰。 基本使用 RabbitMQ是一個開源的消息代理和隊列服務器&a…

spring boot + uniapp 微信公眾號 jsapi 支付

后端支付類 package com.ruoyi.coupon.payment;import com.google.gson.Gson; import com.ruoyi.coupon.payment.dto.PayParamJsapiDto; import com.ruoyi.coupon.payment.dto.RefundParam; import com.ruoyi.coupon.service.ICouponConfigService; import com.wechat.pay.jav…

FFmpeg抽取視頻h264數據重定向

根據視頻重定向技術解析中的 截獲解碼視頻流的思路&#xff0c;首先需要解決如何輸出視頻碼流的問題。 目前只針對h264碼流進行獲取&#xff0c;步驟如下&#xff1a; 打開mp4文件并創建一個空文件用于存儲H264數據 提取一路視頻流資源 循環讀取流中所有的包(AVPacket),為…

redis中使用pipeline批量處理請求提升系統性能

在操作數據庫時&#xff0c;為了加快程序的執行速度&#xff0c;在新增或更新數據時&#xff0c;可以通過批量提交的方式來減少應用和數據庫間的傳輸次數&#xff1b;在redis中也有這樣的技術實現批量處理&#xff0c;也就是管道——Pipeline。它也是通過批量提交數據的方式來實…

線程安全3--wait和notify

文章目錄 wait and notify&#xff08;等待通知機制notify補充 wait and notify&#xff08;等待通知機制 引入wait notify就是為了能夠從應用層面上&#xff0c;干預到多個不同線程代碼的執行順序&#xff0c;這里說的干預&#xff0c;不是影響系統的線程調度策略&#xff08…

uni-app應用設置 可以根據手機屏幕旋轉進行 (橫/豎) 屏切換

首先 我們打開項目的 manifest.json 在左側導航欄中找到 源碼視圖 然后找到 app-plus 配置 在下面加上 "orientation": [//豎屏正方向"portrait-primary",//豎屏反方向"portrait-secondary",//橫屏正方向"landscape-primary",//橫屏…

第57天:django學習(六)

模版之過濾器 語法&#xff1a; {{obj|filter__name:param}} 變量名字|過濾器名稱&#xff1a;變量 default 如果一個變量是false或者為空&#xff0c;使用給定的默認值。否則&#xff0c;使用變量的值。例如&#xff1a; {{ value|default:"nothing"}} length …

IDEA啟動應用時報錯:錯誤: 找不到或無法加載主類 @C:\Users\xxx\AppData\Local\Temp\idea_arg_filexxx

IDEA啟動應用時報錯&#xff0c;詳細錯誤消息如下&#xff1a; C:\devel\jdk1.8.0_201\bin\java.exe -agentlib:jdwptransportdt_socket,address127.0.0.1:65267,suspendy,servern -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management…

基于以太坊的智能合約開發Solidity(事件日志篇)

//聲明版本號&#xff08;程序中的版本號要和編譯器版本號一致&#xff09; pragma solidity ^0.5.17; //合約 contract EventTest {//狀態變量uint public Variable;//構造函數constructor() public{Variable 100;}event ValueChanged(uint newValue); //事件聲明event Log(…

ElasticSearch之cat plugins API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/plugins?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; name component version…

class064 Dijkstra算法、分層圖最短路【算法】

class064 Dijkstra算法、分層圖最短路【算法】 算法講解064【必備】Dijkstra算法、分層圖最短路 code1 743. 網絡延遲時間 // Dijkstra算法模版&#xff08;Leetcode&#xff09; // 網絡延遲時間 // 有 n 個網絡節點&#xff0c;標記為 1 到 n // 給你一個列表 times&…

法律服務網站建設效果如何

律師事務所及法律知識咨詢機構等往往是眾多人群需求的服務&#xff0c;服務多樣化及內容多元化&#xff0c;市場中也有大量品牌&#xff0c;在實際消費服務中大多以本地事務所為主&#xff0c;而線上咨詢服務則一般沒有區域限制&#xff0c;同行增多及人們知識獲取渠道增加&…

C++-引用和指針區別

文章目錄 1.變量的組成2.指針2.1 定義2.2 使用指針操作變量2.3 為什么使用指針 3.引用3.1 定義3.2 引用注意事項 4.引用和指針的區別 1.變量的組成 變量的組成&#xff1a;變量地址&#xff0c;變量名&#xff0c;變量值 例&#xff1a; int i 12;2.指針 2.1 定義 指針用于存…

如何為游戲角色3D模型設置紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

Mybatis中的查詢操作

單表查詢 單表查詢在《初始Mybatis》中已經介紹過&#xff0c;這里就不在介紹了。咱們這里只說單表查詢中的“like查詢”。like查詢單獨使用#{}報錯 <select id"selectByKeyword" resultType"com.example.demo.entity.Userinfo">select * from use…

計網Lesson8 - NAT技術與鏈路層概述

文章目錄 NAT 技術1. 因特網的接入方式2. 公網和私網3. NAT 技術 鏈路層1. 數據鏈路層概述2. 數據鏈路層的三個問題2.1 封裝成幀2.2 透明傳輸2.3 差錯檢測 NAT 技術 1. 因特網的接入方式 光貓將電信號轉換為數字信號發送給路由器 光纖入戶 光纖傳遞的就是數字信號&#xff0c…

python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

經過之前的學習鋪墊&#xff0c;我們嘗試著利用pytest框架編寫一條接口自動化測試用例&#xff0c;來厘清接口自動化用例編寫的思路。 我們在百度搜索天氣查詢&#xff0c;會出現如下圖所示結果&#xff1a; 接下來&#xff0c;我們以該天氣查詢接口為例&#xff0c;編寫接口測…

錯題總結(三)

1.寫代碼將三個整數數按從大到小輸出。 例如&#xff1a; 輸入&#xff1a;2 3 1 輸出&#xff1a;3 2 1 int main() {int a 0;int b 0;int c 0;int tep 0;scanf("%d%d%d", &a, &b, &c);if (a < b){tep a;a b;b tep;}if (b < c){tep b…

每日一練2023.12.9—— 矩陣A乘以B【PTA】

題目鏈接&#xff1a;L1-048 矩陣A乘以B 題目要求&#xff1a; 給定兩個矩陣A和B&#xff0c;要求你計算它們的乘積矩陣AB。需要注意的是&#xff0c;只有規模匹配的矩陣才可以相乘。即若A有Ra?行、Ca?列&#xff0c;B有Rb?行、Cb?列&#xff0c;則只有Ca?與Rb?相等時&a…

Linux Shell 基礎命令

Linux 是一個開源的操作系統&#xff0c;其命令行界面是它的重要組成部分。在這個界面下&#xff0c;Shell 是一個能夠與操作系統進行交互的工具。Shell 是一種程序&#xff0c;它能夠接收用戶輸入的命令&#xff0c;并將這些命令發送到操作系統中進行處理。 在 Linux 中&…