用C++写冒泡排序中的问题

为什么是arr[j],定义的j不是对比的轮数嘛,后面为什么又可以当做数组的位置了

img

i表示的是目前的待排序范围,也就是从arr[1]到arr[i]之间的数据都是待排序的。而j是目前遍历到的位置。

贴出你的代码看看
arr[j]就是取arr数组的第j个

冒泡排序每轮会把最小的排到最前面,下一轮时,第一个就不需要动了,第二轮排好第二个,下一轮前两个都不需要动了
具体实现方法:

#include<bits/stdc++.h>
using namespace std; 
int main()
{
    int a[100];
    int n;
    cin>>n;//输入排序长度
    for(int i=1;i<=n;i++) cin>>a[i];//输入排序数组 
    for(int i=1;i<=n-1;i++){
        for(int j=i+1;j<=n;j++)
        {
            if(a[j]<a[i]) swap(a[i],a[j]);
        }    
    } 
    for(int i=1;i<=n;i++) cout<<a[i]<<" "; 
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7769963
  • 除此之外, 这篇博客: 八皇后-韩顺平java中的 如何用arr[8]表示一种摆法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一维数组arr[8]共有8个元素,下标索引0、1、2、…、7分别表示棋盘的第1、2、3、…、8行。该索引对应的值表示棋盘对应的列。例如arr[0] = 0,表示第 1 个皇后放在棋盘的第 1 行的第 1 列;arr[1] = 4 表示第 2 个皇后放在棋盘的第 2 行的第列 5 列。所以图中的 arr[8] = {0, 4, 7, 5, 2, 6, 1, 3} 能表示一种摆法。