输入整型数组和排序标识,对其元素按照升序或降序进行排序

(一组测试用例可能会有多组数据)

接口说明

原型:

void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag);

输入参数:

Integer[] pIntegerArray:整型数组

int iSortFlag:排序标识:0表示按升序,1表示按降序

输出参数:

返回值:

void

示例

输入

// 输入需要输入的整型数个数
8
1 2 4 9 3 55 64 25
0

输出

// 输出排好序的数字
1 2 3 4 9 25 55 64

Java

import java.util.*;

public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int N = in.nextInt();
Integer[] a = new Integer[N];
for(int i=0;i<N;i++){
a[i] = in.nextInt();
}
int flag = in.nextInt();
sortIntegerArray(a,flag);
}
in.close();
} public static void sortIntegerArray(Integer[] a,int flag){
if(flag==0){
//升序
Arrays.sort(a);
}else{
//降序
Arrays.sort(a,new MyComparator());
}
for(int i=0;i<a.length;i++){
if(i==a.length-1)
System.out.print(a[i]);
else
System.out.print(a[i]+" ");
}
System.out.println();
}
} class MyComparator implements Comparator<Integer>{ @Override
public int compare(Integer o1, Integer o2) {
if(o1.intValue()<o2.intValue())
return 1;
else if(o1.intValue()==o2.intValue())
return 0;
else
return -1;
}
}

C++

#include <iostream>
#include <algorithm> using namespace std; int main(void)
{
int n;
while ( cin >> n )
{
int A[n], i = n-1, tag;
for (i = 0; i < n; i++)
cin >> A[i];
cin >> tag;
sort(A, A+n);
if (tag == 1)
reverse(A, A+n);
for (i = 0; i < n-1; i++)
cout << A[i] << ' ';
cout << A[n-1] << endl;
}
}

python

while True:
try:
a,b,c=input(),map(int,input().split()),input()
print(" ".join(map(str,sorted(b))) if c=="0" else " ".join(map(str,sorted(b,reverse=True))))
except:break

输入字符串中的字符排序

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

示例1

输入

// 输入字符串
A Famous Saying: Much Ado About Nothing (2012/8).

输出

// 输出字符串
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

C++

#include<iostream>
#include<string>
#include<vector>
#include<algorithm> using namespace std; int main()
{
string str;
char ch;
while (getline(cin, str))
{
vector<char> vc;
int n = str.length();
for (int i = 0; i<26; i++)
{
for (int j = 0; j<n; j++)
{
if (str[j] - 'A' == i || str[j] - 'a' == i)
{
vc.push_back(str[j]);
}
}
}
int k=0;
for (int i = 0; i<str.length() && k<vc.size(); i++)
{
if (isalpha(str[i]))
str[i] = vc[k++];
}
cout << str.c_str()<<endl;
}
return 0;
}

Java

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader; public class Main{
public static void main(String []args) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=bf.readLine())!=null){
StringBuffer builder = new StringBuffer();
for(int i=0;i<26;i++){
char c=(char)(i+'A');
for(int j=0;j<str.length();j++){
char sc=str.charAt(j);
if(c==sc||c==sc-32){
builder.append(sc);
}
}
}
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
if(!(c>='a'&&c<='z')&&!(c>='A'&&c<='Z')){
builder.insert(i,c);
}
}
System.out.println(builder.toString());
}
bf.close();
}
}

最短排序

对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。

给定一个整数数组A及它的大小n,请返回最短子数组的长度。

测试样例:

[1,5,3,4,2,6,7],7
返回:4

C++

class ShortSubsequence {
public:
int findShortest(vector<int> A, int n) {
// write code here
int k = -1;
int max = A[0];
for(int i=1;i<n;i++){
if(max > A[i])
k = i;
else
max = A[i];
}
if(k==-1)return 0;
int m = -1;
int min = A[n-1];
for(int i=n-2;i>=0;i--){
if(min < A[i])
m = i;
else
min = A[i];
}
return k-m+1;
}
};

Java

/*
思路:
1.先判断依次最小值是否在正确位置,直到找到不在正确位置最小值的应该在的位置,作为最小需排序的起始点
2.依次判断最大值是否在正确位置,直到找不到正确位置最大值应该在的位置,作为最小需排序的末尾点
3.计算首末位点间的整数个数,即为需要排序的最短子数组长度
*/ import java.util.*; public class ShortSubsequence {
public int findShortest(int[] A, int n) {
int maxIndex = n-1;
int i=0; for(;i<n;i++){
//判断当前子串最小值是否位置正确,若正确继续判断剩余子串最小值是否正确;
//若不正确,判断子串最大值位置是否正确
if(maxIndex==n-1){//
int tmp = findMin(A,i,n);
if(tmp==i){
continue;
}
}
int tmp = findMax(A,i,maxIndex+1);
if(maxIndex==tmp){//若子串最大值位置正确,更新子串最大值位置
maxIndex--;
i--;
continue;
}else{//若子串最大值位置不正确,结束循环
break;
}
}
return maxIndex-i+1;
}
//寻找子串中的最小值的下标
public int findMin(int[] sub,int start, int n){
int min = sub[start];
int index = start;
for(int i=start+1;i<n;i++){
if(min>sub[i]){
min=sub[i];
index = i;
}
}
return index;
}
//寻找子串中的最大值的下标
public int findMax(int[] sub,int start, int n){
int max = sub[start];
int index = start;
for(int i=start+1;i<n;i++){
if(max<sub[i]){
max=sub[i];
index = i;
}
}
return index;
}
}

Python

class ShortSubsequence:
def findShortest(self, A, n):
B, start, end, canEnd = sorted(A), 0, -1, False
for i, v in enumerate(A):
if v != B[i]:
if not canEnd:
start = i
canEnd = True
else:
end = i
return end - start + 1

数据结构与算法——认识O(NlogN)的排序(2)的更多相关文章

  1. 数据结构与算法——认识O(NlogN)的排序(1)

    归并排序 1) 整体就是一个简单递归,左边排好序.右边排好序.让其整体有序 2) 让其整体有序的过程里用了外排序方法 3) 利用master公式来求解时间复杂度 4) 归并排序的实质 时间复杂度0(N ...

  2. Java数据结构和算法(九)——高级排序

    春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...

  3. 为什么我要放弃javaScript数据结构与算法(第十章)—— 排序和搜索算法

    本章将会学习最常见的排序和搜索算法,如冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序,以及顺序排序和二叉搜索算法. 第十章 排序和搜索算法 排序算法 我们会从一个最慢的开始,接着是一些性能好 ...

  4. python 下的数据结构与算法---6:6大排序算法

    顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...

  5. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  6. Hark的数据结构与算法练习之鸽巢排序

    算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1 ...

  7. Hark的数据结构与算法练习之地精(侏儒)排序

    算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...

  8. Hark的数据结构与算法练习之臭皮匠排序

    算法说明 个人感觉是没有意义的算法,只是用来作为学术研究.或者说开拓一下思维. 从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序.在<算 ...

  9. 《Java数据结构与算法》笔记-CH3简单排序

    class ArrayBub { private long[] arr; private int nElement; public ArrayBub(int size) { arr = new lon ...

随机推荐

  1. java中内存的划分

    java中内存的划分 栈(stack):存放的都是方法中的局部变量.方法的运行一定要在栈当中运行. 局部变量:方法的参数,或者是方法{}内部的变量 作用域:一旦超出作用域,立刻从占内存当中消失. 堆( ...

  2. POJ - 2718 Smallest Difference(全排列)

    题意:将n个数字分成两组,两组分别组成一个数字,问两个数字的最小差值.要求,当组内数字个数多于1个时,组成的数字不允许有前导0.(2<=n<=10,每个数字范围是0~9) 分析: 1.枚举 ...

  3. 51nod1021:石子归并

    1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合 ...

  4. torch文档学习笔记

    下面为官方文档学习笔记    http://pytorch.org/docs/0.3.0/index.html 1.torch.Tensor from __future__ import print_ ...

  5. HTTP协议(一):概述

    背景介绍 但凡世界上牛逼的人物,都会有一个非常离奇的经历.比如说乞丐出身的皇帝朱元璋,出生时家中红光大作,映红了半边天;再比如说无良皇帝刘邦,简直不要太牛逼,说自己是老妈和一条白龙交合生出的自己,而老 ...

  6. Python中Opencv和PIL.Image读取图片的差异对比

    近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...

  7. UVA 11404 简单LCS模型DP 字典序比较

    这个题目求某个字符串中含的最长的回文子串. 就是一个很简单的LCS模型吗,而且我不明白为什么网上这么多人都说仿照某写法把字符串先逆序一下,然后求LCS,我只想问一下,有必要吗? 直接按LCS的套路来就 ...

  8. .net core excel导入导出

    做的上一个项目用的是vs2013,传统的 Mvc模式开发的,excel报表的导入导出都是那几段代码,已经习惯了. 导入:string filename = ExcelFileUpload.FileNa ...

  9. VCPU的解释

    vCPU,顾名思义,是虚拟CPU. 创建虚拟机时,需要配置vCPU资源. 因此vCPU是虚拟机的部件. 因此脱离VM,谈论vCPU是没有意义的. 虚拟化管理系统如何调度vCPU,取决于系统内的虚拟机数 ...

  10. 寒假day09

    今天看了论文的结构,定下了毕设论文的框架,刷了剑指offer的部分算法题.