用C++写一段置换选择排序代码模板
时间: 2023-05-21 21:06:06 浏览: 65
以下是一段C语言的置换选择排序代码模板:
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void selection_sort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
int min_idx = i;
for (int j = i + 1; j < n; j++)
{
if (arr[j] < arr[min_idx])
{
min_idx = j;
}
}
swap(&arr[i], &arr[min_idx]);
}
}
您可以根据需要将其修改为其他类型的排序算法,例如插入排序或快速排序。
相关问题
写一段c++选择排序代码
### 回答1:
下面是一段选择排序代码:
```
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n-1; i++) {
minIndex = i;
for (j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: \n");
for (int i=0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
该代码使用选择排序算法对数组中的元素进行排序,最后输出排序后的数组。
### 回答2:
当给定一个数组时,选择排序是一种简单且直观的排序算法。它的基本思想是每次从未排序的部分选择最小(或最大)的元素,然后将其放在已排序部分的末尾。以下是一段用C语言编写的选择排序代码示例:
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n-1; i++) {
minIndex = i; // 将当前下标设为最小值下标
for (j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 更新最小值下标
}
}
// 将找到的最小值与当前位置进行交换
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
printf("排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
在上述代码中,selectionSort()函数用于实现选择排序算法。它使用了两个嵌套的循环来遍历和比较未排序部分的元素,以找到最小的值的下标。然后,将找到的最小值与当前位置进行交换,将其放在已排序部分的末尾。main()函数中定义了一个待排序的数组,并计算数组的大小。然后,调用selectionSort()函数进行排序,并打印排序后的数组。
### 回答3:
当要对一个数组进行升序排列时,常用的一种排序算法是选择排序(Selection Sort)。选择排序的基本思想是,每次从未排序的部分中选择最小的元素,然后将其与未排序部分的第一个元素进行交换,这样就将最小的元素放到了已排序部分的末尾,然后再在剩下的未排序部分中选择最小的元素,重复这个过程,直到整个数组都排序完成。
下面是C语言中选择排序的代码实现:
```
#include <stdio.h>
void selectionSort(int arr[], int n)
{
int i, j, minIndex, temp;
for (i = 0; i < n - 1; i++) {
minIndex = i;
// 在未排序部分中查找最小元素的索引
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex])
minIndex = j;
}
// 将最小元素与未排序部分的第一个元素交换
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
int main()
{
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
printf("排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在上述代码中,首先定义了一个`selectionSort`函数,用于实现选择排序。参数`arr`表示待排序的数组,`n`表示数组的大小。在函数内部,通过两层循环,每次找出未排序部分中的最小元素,并将其与未排序部分的第一个元素交换位置,从而实现排序。然后在`main`函数中,定义了一个待排序的数组`arr`,通过求得数组长度并传入`selectionSort`函数,最后输出排序后的数组。
运行该程序,输出结果为:11 12 22 25 64,即为升序排列后的数组。
用C++写一段快速排序代码
以下是用C++实现快速排序的代码:
```c++
#include <iostream>
using namespace std;
void quicksort(int arr[], int left, int right) {
int i = left, j = right;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
if (left < j)
quicksort(arr, left, j);
if (i < right)
quicksort(arr, i, right);
}
int main() {
int arr[] = {5, 2, 4, 6, 1, 3};
int n = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, 0, n-1);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
```
在上面的代码中,`quicksort()` 函数使用了双指针法来实现快速排序,在每一次循环中,将左指针向右移动直到它指向一个大于等于pivot的元素,然后将右指针向左移动直到它指向一个小于等于pivot的元素,最后交换两个元素的位置。当左指针和右指针相遇时,将待排序数组分成两个部分,递归地对这两个部分进行快速排序,直到整个序列有序。