c++用选择法对十个整数排序
时间: 2024-10-21 21:13:11 浏览: 43
C++实现插入排序对整数数组排序
在C++中,对十个整数进行排序通常会使用内置的数据结构如`std::vector<int>`配合标准库提供的算法,例如快速选择法、冒泡排序、插入排序或归并排序等。这里以快速选择法为例,它是一种类似于快速排序的非比较型排序算法,用于查找第k小的元素,适用于数据部分有序的情况。
以下是使用快速选择法对十个整数进行排序的一个简单示例:
```cpp
#include <vector>
#include <cstdlib> // 需要用到随机函数
// 快速选择函数,返回第k小的元素索引
int quickSelect(std::vector<int>& nums, int k) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
// 选一个pivot
int pivotIndex = rand() % (right - left + 1) + left; // 随机选取中间位置
int newPivotIndex = partition(nums, left, right, pivotIndex);
if (newPivotIndex == k - 1)
return newPivotIndex; // 找到了第k小的元素
else if (newPivotIndex > k - 1)
right = newPivotIndex - 1;
else
left = newPivotIndex + 1;
}
throw std::out_of_range("Element not found"); // 如果k超出范围
}
// 对nums[left...right]进行分区,返回新的枢轴索引
int partition(std::vector<int>& nums, int left, int right, int pivotIndex) {
int pivotValue = nums[pivotIndex];
std::swap(nums[pivotIndex], nums[right]);
int storeIndex = left;
for (int i = left; i < right; ++i) {
if (nums[i] < pivotValue) {
std::swap(nums[i], nums[storeIndex]);
storeIndex++;
}
}
std::swap(nums[right], nums[storeIndex]); // 将pivot放回正确的位置
return storeIndex;
}
void sortTenNumbers(int arr[], int n) {
std::vector<int> vec(arr, arr + n); // 转换为vector便于操作
int k = 5; // 假设我们想要找到第五小的数字,可以根据需要调整
int sortedIndex = quickSelect(vec, k);
// 如果需要,可以将vec的排序结果复制回原数组arr
// arr[sortedIndex] = vec[sortedIndex]; (假设arr足够大)
}
int main() {
int numbers[] = {9, 2, 7, 4, 5, 8, 1, 6, 3, 10};
sortTenNumbers(numbers, sizeof(numbers) / sizeof(numbers[0]));
// 输出已排序的数组
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
```
阅读全文