现有一个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;}