C++ 带编号排序

参考链接“:https://blog.csdn.net/sinat_31425585/article/details/74612768

 sort.cpp

#include <vector>
#include <iostream>
 
using namespace std;
 
void BubbleSort(float  *p, int length, int * ind_diff)
{
    for (int m = 0; m < length; m++)
    {
        ind_diff[m] = m;
    }
 
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < length- i - 1; j++)
        {
            if (p[j] > p[j + 1])
            {
                float temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
 
                int ind_temp = ind_diff[j];
                ind_diff[j] = ind_diff[j + 1];
                ind_diff[j + 1] = ind_temp;
            }
        }
    }
}
 
 
int main()
{
    float a[8] = { 1.0, 1.8, 1.5, 1.1, 4.3, 5.5, 2.2, 8.8 };
 
    int ind[8] = { 0 };
 
    BubbleSort(a, 8, ind);
    
    for (int i = 0; i < 8; i++)
    {
        cout << "value: " << a[i] << "   Index: " << ind[i] << endl;
        
    }
    
    return 0;
}


./a.out 测试输出

bzl@bzl-Latitude-5591:~/Documents/test$ g++ sort.cpp 
bzl@bzl-Latitude-5591:~/Documents/test$ ./a.out 
value: 1   Index: 0
value: 1.1   Index: 3
value: 1.5   Index: 2
value: 1.8   Index: 1
value: 2.2   Index: 6
value: 4.3   Index: 4
value: 5.5   Index: 5
value: 8.8   Index: 7
bzl@bzl-Latitude-5591:~/Documents/test$ 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用冒泡排序来实现: ``` #include <stdio.h> int main() { float nums[] = {3.2, 1.5, 4.7, 2.3, 0.9, 5.8, 6.4, 2.1, 8.0, 7.2, 9.1, 4.5}; int n = sizeof(nums) / sizeof(float); // 冒泡排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (nums[j] > nums[j + 1]) { // 交换元素 float temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } // 输出排序后的结果 printf("排序后的结果为:\n"); for (int i = 0; i < n; i++) { printf("%.1f ", nums[i]); } printf("\n"); return 0; } ``` 输出结果为: ``` 排序后的结果为: 0.9 1.5 2.1 2.3 3.2 4.5 4.7 5.8 6.4 7.2 8.0 9.1 ``` ### 回答2: 要将12个给定的小数从小到大排序,可以使用冒泡排序算法。 冒泡排序的基本思想是通过反复交换相邻的两个元素,将较大(或较小)的元素逐渐向右(或向左)移动到正确的位置。具体步骤如下: 1. 初始化给定的12个小数。 2. 使用两层嵌套的循环,外层循环控制排序的轮数,内层循环用于比较相邻的两个元素。 3. 在内层循环中,比较相邻的两个小数,如果前一个小数大于后一个小数,则交换它们的位置。 4. 经过一轮循环后,最大(或最小)的小数会被交换到最后一个位置。 5. 重复执行第3和第4步,直到所有的小数都被排序正确。 下面是一个示例代码: ```c #include <stdio.h> int main() { float numbers[] = {2.5, 1.3, 4.7, 3.2, 0.8, 5.6, 2.1, 3.8, 1.9, 4.5, 0.5, 3.6}; int length = sizeof(numbers) / sizeof(numbers[0]); int i, j; float temp; for (i = 0; i < length - 1; i++) { for (j = 0; j < length - i - 1; j++) { if (numbers[j] > numbers[j + 1]) { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } printf("排序后的小数为:\n"); for (i = 0; i < length; i++) { printf("%.1f ", numbers[i]); } return 0; } ``` 以上代码中,我们使用了一个float类型的数组来存储给定的小数。通过两层循环,将数组中的小数进行比较和交换,最终得到一个按照从小到大排序的结果。 ### 回答3: 要用C语言将12个给定小数从小到大排序,可以使用冒泡排序或者快速排序等算法。在这里,我将使用冒泡排序来解释。 首先,我们可以将这12个小数存储在一个数组中。假设这个数组名为num,其中包含12个小数。 接下来,我们可以使用嵌套的循环来进行冒泡排序。外层循环控制比较的轮数,内层循环用于比较相邻的元素并进行交换。 开始时,外层循环设置为12次,内层循环每次都要比较相邻的两个元素,并根据需要交换它们的位置。这样,在每一轮完成时,最大的元素将被移动到数组的末尾。因此,在12轮的比较后,所有元素将按照从小到大的顺序排列。 下面是一个使用冒泡排序排序num数组的示例代码: ``` #include <stdio.h> int main() { float num[12] = {5.67, 3.45, 9.12, 1.23, 7.89, 4.56, 6.78, 2.34, 8.90, 10.11, 11.22, 0.99}; int i, j; float temp; for (i = 0; i < 11; i++) { for (j = 0; j < 11-i; j++) { if (num[j] > num[j+1]) { temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } } printf("排序后的小数为:\n"); for (i = 0; i < 12; i++) { printf("%f ", num[i]); } return 0; } ``` 运行以上代码后,将输出排序后的小数数组。 这样,我们就可以使用冒泡排序将给定的12个小数按照从小到大的顺序进行排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值