[NEFU锐格 数据结构]实验八 排序表有关的操作
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NEFU锐格 数据结构]实验八 排序表有关的操作相关的知识,希望对你有一定的参考价值。
[NEFU锐格 数据结构]实验八 排序表有关的操作
正经人谁手写排序啊,无脑sort冲冲冲。
如果阶段考上机排序,sort直接乱杀,可惜排不得。
推荐阅读:[数据结构]NEFU 大二上 锐格实验参考 目录
扯犊子Time
锐格 数据结构系列应该就此完结了,排序算法大家基本都学过,所以来波闲谈,如果单纯看答案就直接跳过吧,或许会影响你一天的心情awa。
关于提问:
问东西之前,自己去搜索引擎搜过,尝试过自己的解决方案是基本要求吧。搜一下就有的东西,再来麻烦别人,这不是浪费别人时间吗。如果你没有付出过努力就来麻烦别人,那么我会考虑下面两种情况:你是一个懒狗或者你的重点在交流而不在于解决问题。
我个人对于这些情况的解决方案取决于:我的时间,我的心情,以及对方在我心中的权重。
如果我不认识你,你还问了个很憨憨的问题,那我大概会无视你吧。
关于称呼:
个人不太喜欢别人给我加什么称呼,不管你是赞美还是拿我打趣。我本来就没有什么特别深的人际关系,无聊的称呼只会加深你我的隔阂,让我倍感孤独。熟人无需称呼直接说事,生人同学相称即可。
关于阶段考:
如果你有自己规划和准备,那这可能是你的阻碍,应付应付就完事了。(冲保研的同学除外)
如果你没有自己规划,那阶段考帮你兜底的,没了这兜底可能会变得很烂吧,安安心心学就万事了。
题目
8550
堆排序,懒得手写堆了,直接C++ STL的priority_queue
优先队列,可以认为他是堆,字面意思就是有顺序的队列嘛,肯定排过顺序
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int>>heap;
int x;while(cin>>x&&x)heap.push(x);
while(!heap.empty()){cout<<heap.top()<<" ",heap.pop();}
return 0;
}
8549
经典快排,找工作挺有用的,建议不会也给背下来
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e5+5;
int q[N];
void quick_sort(int q[],int l,int r)
{
if(l>=r)return;
int i=l-1,j=r+1,x=q[l+r+1>>1];
while(i<j)
{
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j)swap(q[i],q[j]);
}
quick_sort(q,l,i - 1),quick_sort(q,i,r);
}
int main()
{
int n=0,x;
while(~scanf("%d",&x)&&x)q[++n]=x;
quick_sort(q,1,n);
for(int i=1;i<=n;i++)printf("%d ",q[i]);
}
8548
简单选择排序
#include <stdio.h>
void Sort(int a[],int n){
for(int i=0; i<n-1; i++){
int min_index = i;
for(int j=i+1; j<n; j++)
if(a[j] < a[min_index])
min_index = j;
if( i != min_index){
int temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
int A[105];
int n,x;
int main() {
while(~scanf("%d",&x)&&x)A[n++]=x;
Sort(A,n);
for(int i=0;i<n;i++)printf("%d ",A[i]);
return 0;
}
8547
希尔排序,优化的插入排序嘛
#include <stdio.h>
void Sort(int a[], int len){
int i, j, k, tmp, gap; // gap 为步长
for (gap = len / 2; gap > 0; gap /= 2) { // 步长初始化为数组长度的一半,每次遍历后步长减半,
for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标
for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
tmp = a[j]; // 备份a[j]的值
k = j - gap; // j初始化为i的前一个元素(与i相差gap长度)
while (k >= 0 && a[k] > tmp) {
a[k + gap] = a[k]; // 将在a[i]前且比tmp的值大的元素向后移动一位
k -= gap;
}
a[k + gap] = tmp;
}
}
}
}
int A[105];
int n,x;
int main() {
while(~scanf("%d",&x)&&x)A[n++]=x;
Sort(A,n);
for(int i=0;i<n;i++)printf("%d ",A[i]);
return 0;
}
8546
冒泡排序
#include <stdio.h>
void Sort(int arr[], int n) {
int temp;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int A[105];
int n,x;
int main() {
while(~scanf("%d",&x)&&x)A[n++]=x;
Sort(A,n);
for(int i=0;i<n;i++)printf("%d ",A[i]);
return 0;
}
8545
直接插入排序
#include <stdio.h>
int InsertSort(int A[], int n) {
for(int i=2; i<=n; i++) {
A[0]=A[i];
int j;
for(j=i-1; A[0]<A[j]; j--)A[j+1]=A[j];
A[j+1]=A[0];
}
return 0;
}
int A[105];
int n,x;
int main() {
while(~scanf("%d",&x)&&x)A[++n]=x;
InsertSort(A,n);
for(int i=1;i<=n;i++)printf("%d ",A[i]);
return 0;
}
以上是关于[NEFU锐格 数据结构]实验八 排序表有关的操作的主要内容,如果未能解决你的问题,请参考以下文章