数据结构与算法——认识O(NlogN)的排序(2)
输入整型数组和排序标识,对其元素按照升序或降序进行排序
(一组测试用例可能会有多组数据)
接口说明
原型:
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)的更多相关文章
- 数据结构与算法——认识O(NlogN)的排序(1)
		
归并排序 1) 整体就是一个简单递归,左边排好序.右边排好序.让其整体有序 2) 让其整体有序的过程里用了外排序方法 3) 利用master公式来求解时间复杂度 4) 归并排序的实质 时间复杂度0(N ...
 - Java数据结构和算法(九)——高级排序
		
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
 - 为什么我要放弃javaScript数据结构与算法(第十章)—— 排序和搜索算法
		
本章将会学习最常见的排序和搜索算法,如冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序,以及顺序排序和二叉搜索算法. 第十章 排序和搜索算法 排序算法 我们会从一个最慢的开始,接着是一些性能好 ...
 - python 下的数据结构与算法---6:6大排序算法
		
顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...
 - Java数据结构和算法之数组与简单排序
		
一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...
 - Hark的数据结构与算法练习之鸽巢排序
		
算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1 ...
 - Hark的数据结构与算法练习之地精(侏儒)排序
		
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...
 - Hark的数据结构与算法练习之臭皮匠排序
		
算法说明 个人感觉是没有意义的算法,只是用来作为学术研究.或者说开拓一下思维. 从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序.在<算 ...
 - 《Java数据结构与算法》笔记-CH3简单排序
		
class ArrayBub { private long[] arr; private int nElement; public ArrayBub(int size) { arr = new lon ...
 
随机推荐
- git push 现有代码到一个新的分支
			
git push origin HEAD:task/xxx-test-local git push的一般形式为 git push <远程主机名> <本地分支名> <远程 ...
 - 吴裕雄--天生自然 JAVASCRIPT开发学习
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
 - Flink:动态表上的连续查询
			
用SQL分析数据流 越来越多的公司在采用流处理技术,并将现有的批处理应用程序迁移到流处理或者为新的应用设计流处理方案.其中许多应用程序专注于分析流数据.分析的数据流来源广泛,如数据库交易,点击,传感器 ...
 - Day 3:集合
			
数组: 存储同一种数据类型的集合容器数组的特点: 1. 只能存储同一种数据类型的数据. 2. 一旦初始化,长度固定. 3. 数组中的元素与元素之间的内存地址是连续的. 注意: Object类型的数组 ...
 - 第一章:MySQL架构和历史
			
1.MySQL逻辑架构 MySQL存储引擎架构:将查询处理以及其他任务系统和数据的存储处理分离开来,这样做的好处在于可以根据需要灵活选择存储引擎. 第一层架构 -- 连接处理.授权认证.安全等. 第二 ...
 - SAP_SD常用事务代码
			
1.创建/修改/显示销售订单:VA01/VA02/VA03 2.根据销售订单创建交货单:VL01N 3.修改/显示交货单:VL02N/VL03N 4.交货单发货过账:VL02N 5.发货过账冲销:VL ...
 - MyBatis:配置解析
			
配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configur ...
 - VUE常见的语法
			
模版渲染{{msg}} v-html="" v-text="" v-bind:id="" 类似 attr 三元判断 {{ok?'yes': ...
 - xv6 makefile
			
1. xv6.img的构建 在makefile中 bootblock: bootasm.S bootmain.c $(CC) $(CFLAGS) -fno-pic -O -nostdinc -I. - ...
 - Java 接口理解
			
学习Spring有一段时间了,对java也有了一点了解,最不能理解的就是接口, 即使是写了接口并实现了它,依然无法理解它到底有什么用?看了其他几篇博客,总结了一下自己的理解. 在JAVA编程语言中是一 ...