ArrayList 冒泡排序 帮忙看下这个,里面用set()如何排序啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList 冒泡排序 帮忙看下这个,里面用set()如何排序啊?相关的知识,希望对你有一定的参考价值。

public void print()
for(int i=0;i<unit1.size();i++)

for (int j=0;j<unit1.size()-i-1;j++)

if(unit1.get(j)>unit1.get(j+1))





for(int i=0;i<name1.size();i++)
System.out.print("名称: "+name1.get(i)+" , 数量: "+amount1.get(i)+" , 单价: "+unit1.get(i)+"$\n");


这是个不完整的代码,如果看着别扭,我在贴~!

public void main(List<Long> unit1)
unit1.add(new Long(9));
unit1.add(new Long(6));
unit1.add(new Long(4));
unit1.add(new Long(12));
unit1.add(new Long(3));
unit1.add(new Long(5));
unit1.add(new Long(11));
int i, j;
int n = unit1.size()-1;
Boolean exchange; // 交换标志
for (i = 0; i < n; i++) // 最多做n-1趟排序
exchange = false; // 本趟排序开始前,交换标志应为假
for (j = n - 1; j >= i; j--) // 对当前无序区R[i..n]自下向上扫描
if (unit1.get(j) > unit1.get(j + 1))
Long iTemp = new Long(0);
iTemp = unit1.get(j + 1);
unit1.set(j + 1, unit1.get(j));
unit1.set(j, iTemp);
exchange=true;


if (!exchange) // 本趟排序未发生交换,提前终止算法
break;

for (i = 0; i <= n; i++)
System.out.print(unit1.get(i));
System.out.print(",");

参考技术A for(int i=0;i<unit1.size();i++)

for (int j=0;j<i-1;j++)

if(unit1.get(j)>unit1.get(j+1))

Integer iTemp = 0;
iTemp = unit1.get(j + 1);
unit1.set(j + 1, unit1.get(j));
unit1.set(j, iTemp);


参考技术B ArrayList相当于一个数组,你把它当成数组来处理就可以了呀,我想你应该知道冒泡排序的关键代码吧。你自己试试做看看

校内集训 miku set模拟冒泡排序 逆序对

题意

  • 给你一个长为(n)的序列,进行(m)次操作,每次对一个区间进行排序,求最后的序列((n <= 1500, m <= 1e6))

这道题目思维难度挺大的

对于一个序列,排序的本质就是消除里面的所有逆序对

考虑冒泡排序的过程,每次也是交换(a[i]>a[i+1])这个逆序对

这样子交换最多有(n^2)

那么我们可以用一个数据结构模拟冒泡排序交换逆序对这个过程

用一个(set)维护所有逆序对的位置

每次暴力删除区间内所有逆序对

再把新产生的逆序对加入(set)

复杂度(O((n^2+m)log n))

Codes

#include <set>
#include <cstdio>

using namespace std;

const int N = 1500 + 10;

set<int> S;
set<int>::iterator it;

int a[N], n, q, L, R;

int main() {
    //freopen("miku.in", "r", stdin);
    //freopen("miku.out", "w", stdout);

    scanf("%d%d%d%d", &n, &q, &L, &R);
    for (int i = 1; i <= n; ++ i) 
        scanf("%d", &a[i]);
    for (int i = 1; i < n; ++ i) 
        if (a[i] > a[i + 1]) 
            S.insert(i);
    S.insert(n), a[n + 1] = 2e9;

    while (q --) {
        int l, r; scanf("%d%d", &l, &r);
        for (; *(it = S.lower_bound(l)) < r; S.erase(it ++)) {
            swap(a[*it], a[*it + 1]);
            if(a[*it - 1] > a[*it]) S.insert(*it - 1);
            if(a[*it + 1] > a[*it + 2]) S.insert(*it + 1);
        }
    }

    for (int i = L; i <= R; ++ i)
        printf("%d%c", a[i], i == R ? ‘
‘ : ‘ ‘);

    return 0;
}

以上是关于ArrayList 冒泡排序 帮忙看下这个,里面用set()如何排序啊?的主要内容,如果未能解决你的问题,请参考以下文章

用Java中ArrayList类实现一个冒泡排序

Java中的ArrayList怎么进行冒泡排序

使用 RNG 的 Arraylist 冒泡排序

java如何让list按照list里面的某个字段排序,list里面的有很多字段!

冒泡排序

对 2D ArrayList 进行冒泡排序