现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。
第一行输入一个正整数n(n≤1000),表示数字序列的元素个数,占一行;接下来一行输入从1到n的n个整数排序,中间用空格隔开
输出序列升序排列需要的最少交换次数
4<br/>4 3 2 1
6
#include<iostream> using namespace std; int main() { int num; while (cin >> num){ int a[1000],tem,total=0; for (int i = 0; i < num; i++) cin >> a[i]; int *p = a; for (int i = 0; i < num; i++){ for (int j = 0; j<(num-1); j++){ if (*p>*(p + 1)){ tem = *p; *p = *(p + 1); *(p + 1) = tem; total++; } p++; } p = a; } cout << total << endl; } return 0; }//恢复有序状态,统计交换次数
#include <iostream> #include<vector> #include<algorithm> using namespace std; int main(void) { int n; while (cin>>n) { int* arr = new int[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } int count = 0; bool flag = true; for (int i = n-1; i >0; --i) { if (flag==false) { break; } flag = false; for (int j = 0; j < i; j++) { if (arr[j]>arr[j+1]) { std::swap(arr[j], arr[j + 1]); ++count; flag = true; } } } cout << count << endl; delete[] arr; } return 0; }
}
function paixu(d,a){ var b = a.replace(/\s+/g,""); var c = b.split(""); var len = b.length; var count = 0; for(var i = 0;i<len-1;i++){ for(var j = i+1;j<len;j++){ var temp = c[i]; if(temp>c[j]){ var index = c[j]; c[j] = temp; c[i] = index; count+=1; } } } alert(count); } var a = "4 3 2 1"; var aa = a .replace(/\s+/g,""); var d = aa.length; paixu(d,a)
/**
Created by wxf on 2017/8/4.
*/
var readline = require('readline');
const rl = readline.createInterface({
input:process.stdin,
output:process.stdout
});
var inputarr = [];
rl.on("line",function(input){
inputarr.push(input);
var n = +inputarr[0];
if(inputarr[1]){
var newarr = inputarr[1].trim().split(" ");
if(newarr.length == n) {
var line = newarr.slice(0);
var temp = 0, count = 0;
console.log(line.length)
for(var i = 0;i<line.length;i++){
for(var j= 0;j<line.length-1-i;j++){
if(line[j] > line[j+1]){
temp = line[j];
line[j] = line[j+1];
line[j+1] = temp;
count++;
}
}
}
console.log(count);
}
}
})
求解,冒泡是这么冒的吗
#include <iostream> #include <string> #include <vector> #include <algorithm> int main() { using namespace std; int n; while (cin >> n) { vector<int> arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (arr[i] > arr[j]) { swap(arr[i], arr[j]); ans++; } } } cout << ans << endl; } return 0; }
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
while(input.hasNext()){
int number=input.nextInt();
int[] a=new int[number];
for(int i=0;i<number;i++){
a[i]=input.nextInt();
}
int count=0;
for(int i=1;i<number;i++){
for(int j=0;j<i;j++){
if(a[j]>a[i]){
count++;
}
}
}
System.out.println(count);
}
input.close();
}
}
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; int count = 0; cin >> n; vector<int> arr(n, 0); for (int i = 0; i < n; i++) { cin >> arr[i]; for (int j = 0; j < i; j++) { if (arr[j] > arr[i]) { swap(arr[j], arr[i]); count++; } } } cout << count; return 0; }
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(); int[] array = new int[n]; for (int i = 0; i < n; i++) { array[i] = in.nextInt(); } int res = count(array); System.out.println(res); } } private static int count(int[] array) { if (array == null || array.length == 0) { return 0; } int res = 0; for (int i = 0; i < array.length; i++) { boolean flag = false; int j; for (j = i - 1; j >= 0;) { if (array[j] <= array[j + 1]) { break; } else { res++; swap(array, j, j + 1); flag = true; j--; } } } return res; } private static void swap(int[] array, int left, int right) { int temp = array[left]; array[left] = array[right]; array[right] = temp; } }开始用的插入排序,发现过不了,只好改了改。
#include <iostream> #include <vector> #include <algorithm> using namespace std; int bubbleSort(vector<int> A) { int num=0; int n=A.size()-1; for(int i=n;i>0;--i) { for(int j=1;j<=i;++j) { if(A[j]<A[j-1]) { swap(A[j],A[j-1]); num++; } } } return num; } int main() { int num; cin>>num; vector<int> A; while(num--) { int tmp; cin>>tmp; A.push_back(tmp); } num=bubbleSort(A); cout<<num; }
def bubble_count(lst, n):"""题意应该是只能交换相邻数字,冒泡排序是一种交换排序,统计交换次数即可"""swap_count = 0for i in range(n):for j in range(1,n-i):if lst[j-1] > lst[j]:lst[j-1], lst[j] = lst[j], lst[j-1]swap_count += 1return swap_countimportsystry:whileTrue:line = sys.stdin.readline().strip()if not line:breakn = int(line)nums = map(int, sys.stdin.readline().strip().split())print bubble_count(nums, n)except:pass
#include <iostream>#include <vector>#include <algorithm>using namespace std;intmain(){intn;cin >> n;vector<int> data(n);for(inti=0; i<n; i++)cin >> data[i];vector<int> tmp(data.begin(), data.end());sort(tmp.begin(), tmp.end());intswapt = 0;intset = 0;while(set < n){for(inti=0; i<n; i++){vector<int>::iterator it = find(data.begin(), data.end(), tmp[i]);intpos = it - data.begin();for(intj=pos; j>i; j--){swap(data[j], data[j-1]);swapt ++;}set ++;}}cout << swapt << endl;return0;}