冒泡排序为啥排序不成功

#include <stdio.h>

void exp(int* ch,int len)
{

 for (int i = 0; i < len - 1; i++)
  {
       for (int j = 0; j < len - 1 - j; j++)
      {
         if (  *(ch + j) < *(ch + j + 1))
          {
           int temp = *(ch + j);
              *(ch + j) = *(ch + j +1);
           *(ch + j + 1) = temp;
          }
      }
  }

}

int main()
{

int arr[] = { 2,3,1,6,4,8,5,9,0,7 };
int len = sizeof(arr) / sizeof(arr[0]);

exp(arr,len);

for(int i=0;i<len;i++)
printf("%d ", * (arr + i));
return 0;

}

j < len - 1 - j
改成
j < len - 1 - i

j=i
j < len - 1 - i


 for (int i = 0; i < len - 1; i++)
  {
       for (int j = i; j < len - 1 - i; j++)
      {
         if (  *(ch + j) < *(ch + j + 1))
          {
           int temp = *(ch + j);
              *(ch + j) = *(ch + j +1);
           *(ch + j + 1) = temp;
          }
      }
  }

for (int i = 0; i < len - 1; i++)
{
for (int j = i; j < len - 1 - i; j++)
{
if ( *(ch + j) < *(ch + j + 1))
{
int temp = *(ch + j);
*(ch + j) = *(ch + j +1);
*(ch + j + 1) = temp;
}
}
}

第二个for循环不对,应该是从i当前的位置开始,一直到最后的位置,所以是j=i,长度是len-1-i;可以用笔画画就明白了,如果按照你的,本来换好位置的又还回去了


for (int i = 0; i < len - 1; i++)
  {
       for (int j = i; j < len - 1 - i; j++)
      {
         if (  *(ch + j) < *(ch + j + 1))
          {
           int temp = *(ch + j);
              *(ch + j) = *(ch + j +1);
           *(ch + j + 1) = temp;
          }
      }
  }