有序和无序数组排列升序范例

时间:2022-12-24 07:56:44

void SX(int arr[] ,int sz)//只适用于有序数组

{

      //确定趟数

     int i = 0;

     for (i = 0; i < sz - 1; i++)

      {//这个循环是控制交换的次数如:第五个数和第六个数交换完就算完。

         int j = 0;

         for (j = 0; j <= sz - 1 - i; j++)

                   {//把第一个数的值一直好下一个数交换,循环sz-1-i次

                      int tmp = arr[j];

                     arr[j] = arr[j + 1];

                     arr[j + 1] = tmp;

                  }

     }

}


void SX(int arr[], int sz)//优化后

{

//确定趟数

int i = 0;

for (i = 0; i < sz - 1; i++)

             {

                int flag = 1;//假设本次排序已经有序,更加优化的步骤,结束后面的循环

               int j = 0;

              for (j = 0; j < sz-1-i; j++)//如果加等于的话会出现不一样的结果

               {//确定交换次数

                  if(arr[j]>arr[j+1])

                   {  

                  int tmp = arr[j];

                   arr[j] = arr[j + 1];

                  arr[j + 1] = tmp;

                   flag = 0;//本次排序还无序

                  }

              }

              if (flag == 1)

             {

            break;

             }

             }

      }

 int arr[] = {0,1,2,3,4,5,6,7,8,9};

int i = 0;

int sz = sizeof(arr) / sizeof(arr[0]);

//对arr进行排序,排成升序

SX(arr, sz);//冒泡函数排序

for (i = 0; i < sz; i++)

{

 printf("%d ", arr[i]);

}