编程题:sdut-冒泡排序中数据交换的次数
听说过冒泡排序么?一种很暴力的排序方法。今天我们不希望你用它来排序,而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。
### 输入格式:
第一行为一个正整数 T ,表示有 T 组测试数据。
接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100。
### 输出格式:
输出共 T 行。
每行一个整数,代表本行数据从小到大冒泡排序所进行的交换次数。
### 输入样例:
in
3
5 1 2 3 4 5
4 5 3 7 1
2 2 1
### 输出样例:
out
0
4
1
答案:若无答案欢迎评论
JAVA代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t;
t = sc.nextInt();
while (t --> 0) { //t组输入
int n = sc.nextInt();
int[] a = new int[n + 1];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
int p, c = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) { //冒泡排序
if (a[j] > a[j + 1]) {
p = a[j];
a[j] = a[j + 1];
a[j + 1] = p;
c++; //计数
}
}
}
System.out.println(c);
}
sc.close();
}
}
PYTHON3代码1:(用函数来实现)
def sortCount(a):
x=0
for i in range(0,len(a)):
for j in range(0,len(a)-1-i):
if(a[j]>a[j+1]):
a[j],a[j+1]=a[j+1],a[j]
x+=1
return x
t=int(input())
while(t!=0):
try:
a=list(map(int,input().split()))
x=sortCount(a[1:])
print(x)
except:
break
PYTHON代码2:(不用函数实现)
t = int(input())
while (t != 0):
try:
a = list(map(int, input().split()))
a = a[1:]
x = 0
for i in range(0, len(a)):
for j in range(0, len(a) - 1 - i):
if (a[j] > a[j + 1]):
a[j], a[j + 1] = a[j + 1], a[j]
x += 1
print(x)
except:
break
### 输入格式:
第一行为一个正整数 T ,表示有 T 组测试数据。
接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100。
### 输出格式:
输出共 T 行。
每行一个整数,代表本行数据从小到大冒泡排序所进行的交换次数。
### 输入样例:
in
3
5 1 2 3 4 5
4 5 3 7 1
2 2 1
### 输出样例:
out
0
4
1
答案:若无答案欢迎评论
JAVA代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t;
t = sc.nextInt();
while (t --> 0) { //t组输入
int n = sc.nextInt();
int[] a = new int[n + 1];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
int p, c = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) { //冒泡排序
if (a[j] > a[j + 1]) {
p = a[j];
a[j] = a[j + 1];
a[j + 1] = p;
c++; //计数
}
}
}
System.out.println(c);
}
sc.close();
}
}
PYTHON3代码1:(用函数来实现)
def sortCount(a):
x=0
for i in range(0,len(a)):
for j in range(0,len(a)-1-i):
if(a[j]>a[j+1]):
a[j],a[j+1]=a[j+1],a[j]
x+=1
return x
t=int(input())
while(t!=0):
try:
a=list(map(int,input().split()))
x=sortCount(a[1:])
print(x)
except:
break
PYTHON代码2:(不用函数实现)
t = int(input())
while (t != 0):
try:
a = list(map(int, input().split()))
a = a[1:]
x = 0
for i in range(0, len(a)):
for j in range(0, len(a) - 1 - i):
if (a[j] > a[j + 1]):
a[j], a[j + 1] = a[j + 1], a[j]
x += 1
print(x)
except:
break