用C++实现下列问题从标准输入中输入一组互不相同的整数(个数不超过100)及排序方式,按照从小到大排序,输出按某种算法排序的结果及元素的比较次数。
时间: 2024-05-24 15:12:38 浏览: 20
#include <stdio.h>
void bubbleSort(int arr[], int n, int *count) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
(*count)++;
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void selectionSort(int arr[], int n, int *count) {
int i, j, minIndex, temp;
for (i = 0; i < n - 1; i++) {
minIndex = i;
for (j = i + 1; j < n; j++) {
(*count)++;
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
void insertionSort(int arr[], int n, int *count) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
(*count)++;
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main() {
int arr[100], n, i, sortType, count = 0;
printf("请输入元素个数(不超过100):");
scanf("%d", &n);
printf("请输入%d个互不相同的整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请选择排序方式(1:冒泡排序,2:选择排序,3:插入排序):");
scanf("%d", &sortType);
switch (sortType) {
case 1:
bubbleSort(arr, n, &count);
printf("冒泡排序结果:");
break;
case 2:
selectionSort(arr, n, &count);
printf("选择排序结果:");
break;
case 3:
insertionSort(arr, n, &count);
printf("插入排序结果:");
break;
default:
printf("无效的排序方式!");
return 0;
}
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n元素比较次数:%d", count);
return 0;
}