[td=1
,1
,50%] 
f490;The Begin
f490;点点关注,收藏不迷路
f490; 输入n个不类似的正整数,每个数都不凌驾n。现在必要你把这些整数举行升序排序,每次可以交换两个数的位置,最少必要多少次利用才可以完成排序。
输入
第一行输入n(1
≤n≤1
05)
第二行为n个互不相称且不大于n的正整数。
输出
输出最少交换次数。
样例输入
样例输出
提示
样例解释࿱
a;交换3和1
通过遍历数组,检查每个位置上的数是否处于其应该在的位置(按照从小到大排序的正确位置),如果不是,则找到应该在当前位置的那个数的下标,然后交换这两个数的位置,每举行一次这样的交换利用,记载交换次数的变量就加1
,最后输出总的交换次数。
C语言实现
- #include <stdio.h>#include <stdlib.h>#define MAX_N 1
- 00005int 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 <iostream>#include <vector>using namespace std;int main() { int n; cin >> n; vector<int> 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 =
- ; 0for 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)
复制代码[img]https://img-blog.csdnimg.cn/direct/cbeed1
f01
04c4f7380f37a309f3af1
cb.png#pic_center[/img]
[td=1
,1
,50%] 
f490;The End
f490;点点关注,收藏不迷路
f490;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao1
23.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |