您的位置:首页 > 财经 > 产业 > 湖南网站建设怎么样_私人聊天服务器_百度客服在线咨询人工服务_网络推广培训去哪里好

湖南网站建设怎么样_私人聊天服务器_百度客服在线咨询人工服务_网络推广培训去哪里好

2025/2/24 0:39:16 来源:https://blog.csdn.net/qq_41840843/article/details/144169642  浏览:    关键词:湖南网站建设怎么样_私人聊天服务器_百度客服在线咨询人工服务_网络推广培训去哪里好
湖南网站建设怎么样_私人聊天服务器_百度客服在线咨询人工服务_网络推广培训去哪里好

排序的事

      • C语言实现
      • C++实现
      • Java实现
      • Python实现


💐The Begin💐点点关注,收藏不迷路💐

输入n个不相同的正整数,每个数都不超过n。现在需要你把这些整数进行升序排序,每次可以交换两个数的位置,最少需要多少次操作才可以完成排序。

输入

第一行输入n(1≤n≤105)

第二行为n个互不相等且不大于n的正整数。

输出

输出最少交换次数。

样例输入

3
3 2 1

样例输出

1

提示
样例解释:交换3和1

通过遍历数组,检查每个位置上的数是否处于其应该在的位置(按照从小到大排序的正确位置),如果不是,则找到应该在当前位置的那个数的下标,然后交换这两个数的位置,每进行一次这样的交换操作,记录交换次数的变量就加1,最后输出总的交换次数。

C语言实现

#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100005 int n; int arr[MAX_N]; // 存储输入的整数数组

// 找到数组中值为x的元素的下标 int findIndex(int x) {
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
return i;
}
}
return -1; // 正常情况下不会执行到这,只是为了符合函数返回值类型添加 }

int main() {
scanf(“%d”, &n);
for (int i = 0; i < n; i++) {
scanf(“%d”, &arr[i]);
}
int count = 0; // 记录交换次数
for (int i = 0; i < n; i++) {
if (arr[i]!= i + 1) { // 如果当前位置的数不等于其应该在的位置(从小到大排序时的位置)
int index = findIndex(i + 1); // 找到应该在当前位置的数的下标
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp; // 交换两个数的位置
count++;
}
}
printf(“%d\n”, count);
return 0;
}

C++实现

#include
#include using namespace std;

int main() {
int n;
cin >> n;
vector arr(n); // 使用vector存储输入的整数数组
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int count = 0; // 记录交换次数
for (int i = 0; i < n; i++) {
if (arr[i]!= i + 1) { // 如果当前位置的数不等于其应该在的位置(从小到大排序时的位置)
int index = 0;
for (int j = 0; j < n; j++) {
if (arr[j] == i + 1) {
index = j;
break;
}
}
swap(arr[i], arr[index]); // 交换两个数的位置
count++;
}
}
cout << count << endl;
return 0;
}

Java实现

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int count = 0; // 记录交换次数
for (int i = 0; i < n; i++) {
if (arr[i]!= i + 1) { // 如果当前位置的数不等于其应该在的位置(从小到大排序时的位置)
int index = 0;
for (int j = 0; j < n; j++) {
if (arr[j] == i + 1) {
index = j;
break;
}
}
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp; // 交换两个数的位置
count++;
}
}
System.out.println(count);
}
}

Python实现

n = int(input()) arr = list(map(int, input().split())) count = 0 for i
in range(n):
if arr[i]!= i + 1: # 如果当前位置的数不等于其应该在的位置(从小到大排序时的位置)
index = arr.index(i + 1) # 找到应该在当前位置的数的下标
arr[i], arr[index] = arr[index], arr[i] # 交换两个数的位置
count += 1 print(count)

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com