7 条题解

  • 3
    @ 2023-7-22 14:02:59

    解析

    假如已经得到了一个有序的序列,以及一个待插入的元素。在序列中找到该元素应当插入的位置并插入,就能得到含有该元素的有序序列,若将所有需要排序的数一一插入,就能完成排序。

    现在要输出每一次插入操作后的结果,直接输出即可。

    题解

    #include <iostream>
    using namespace std;
    int main()
    {
        int a[1005];
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= n; i++)
        {
            int nowX = a[i];
            int nowPos = i;
            while (a[nowPos - 1] > nowX && nowPos > 1)
            {
                a[nowPos] = a[nowPos - 1];
                nowPos--;
            }
            a[nowPos] = nowX;
            for (int j = 1; j <= n; j++)
            {
                cout << a[j] << " ";
            }
            cout << endl;
        }
        return 0;
    }
    

    当然,同学们可能会觉得,“这代码好麻烦”、“谁没事这么写代码”。

    原因是:在课堂上,为了帮大家理清思路,所以选择了比较麻烦的写法,同样的选择、冒泡、计数等排序,都是如此。

    • 2
      @ 2023-7-23 21:53:42

      yasuo流 请问谁没复制核桃或题解上的,核桃上都有👀️

      #include <iostream>
      using namespace std;
      int q,a[2001];
      void cp(){
          for(int i=1;i<=q;i++){
              int shu=a[i],pown=i;
              while(a[pown-1]>shu){
                  a[pown]=a[pown-1];
                  pown--;}
              a[pown]=shu;
              for(int i=1;i<=q;i++) cout<<a[i]<<" ";
              cout<<"\n";}}
      int main(){
          cin>>q;
          for(int i=1;i<=q;i++) cin>>a[i];
          cp();return 0;}
      
      • 1
        @ 2023-7-23 21:41:35

        hello😄 :

        1.定义数组x; 2.定义一个sort函数(提示:定义一个void …的函数是无返回值的!!!),while循环判断如果当前的位置不是第一位而且前面这个数比要插入的数小,就把前一位的数字往后挪,然后当前位置往前挪。找到位置后,插入要插入的数 3.调用主函数:int main(),for循环0到小于n,并输入。再for循环0到小于n,定义index,找到当前的位置,定义num = 将要插入的数:x[index]。 4.调用sort函数计算,for循环输出数组。因为输出样例换行了,所以我们也必须换行。 5.记得点“亿赞”👍

        #include <iostream>
        using namespace std;
        int x[105];//数组最好定大"亿"点点|(-v-)|
        void sort(int index,int num)
        {
            while(index > 0 && x[index - 1] > num)
            //如果当前的位置不是第一位而且前面这个数比要插入的数小
            {
                x[index] = x[index - 1];//就把前一位的数字往后挪
                index--;//然后当前位置往前挪
            }
            x[index] = num;//找到位置后,插入要插入的数
        }
        
        int main()
        {
            int n;
            cin >> n;
            for(int i = 0;i < n;i++)
                cin >> x[i];
            for(int i = 0;i < n;i++)
            {
                int index = i;//当前的位置
                int num = x[index];//将要插入的数
                sort(index,num);
                for(int i = 0;i < n;i++)
                    cout << x[i] << ' ';//输出数组
                cout << endl;//因为输出样例换行了,所以我们也必须换行
            }
            return 0;
        }
        
        • 0
          @ 2023-8-10 9:55:27

          #include<bits/stdc++.h> using namespace std; int q[100],w[100]; int main() { int n; cin>>n; for(int i=0;i<n;i++)cin>>q[i]; for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(q[i]>w[j]) { for(int k=n-2;k>=j;k--)w[k+1]=w[k]; w[j]=q[i]; q[i]=0; for(int k=n-1;k>=0;k--)if(w[k]!=0)cout<<w[k]<<' '; for(int k=0;k<n;k++)if(q[k]!=0)cout<<q[k]<<' '; cout<<endl; break; } return 0; }

          • 0
            @ 2023-8-10 9:53:38

            #include <iostream> using namespace std; int main() { int a[1005]; int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) { int nowX = a[i]; int nowPos = i; while (a[nowPos - 1] > nowX && nowPos > 1) { a[nowPos] = a[nowPos - 1]; nowPos--; } a[nowPos] = nowX; for (int j = 1; j <= n; j++) { cout << a[j] << " "; } cout << endl; } return 0; }

            • 0
              @ 2023-7-25 16:03:40

              难死

              #include<bits/stdc++.h>
              using namespace std;
              int q[100],w[100];
              int main()
              {
                  int n;
                  cin>>n;
                  for(int i=0;i<n;i++)cin>>q[i];
                  for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(q[i]>w[j])
                              {
                                  for(int k=n-2;k>=j;k--)w[k+1]=w[k];
                                  w[j]=q[i];
                                  q[i]=0;
                                  for(int k=n-1;k>=0;k--)if(w[k]!=0)cout<<w[k]<<' ';
                                  for(int k=0;k<n;k++)if(q[k]!=0)cout<<q[k]<<' ';
                                  cout<<endl;
                                  break;
                              }
                  return 0;
              }
              
              • @ 2023-7-28 15:31:08

                乍一看你像是再写汇编程序……

            • 0
              @ 2023-7-22 16:40:26

              大概思路:

              用插入排序对数组进行排序,每排完一次输出一次数组

              #include <iostream>
              using namespace std;
              
              int a[105];
              
              //为了方便检查,我把排序用的代码放进函数里面了
              void sort(int index,int num)
              {
                  while(index > 0 && a[index - 1] > num)
                  //如果当前位置不是第一位而且前面这个数比要插入的数小
                  {
                      a[index] = a[index - 1];//把前一位的数字往后挪
                      index--;//当前位置往前挪
                  }
                  a[index] = num;//找到位置后,插入要插入的数
              }
              
              int main()
              {
                  int n;
                  cin >> n;
                  for(int i = 0;i < n;i++)
                      cin >> a[i];
                  for(int i = 0;i < n;i++)
                  {
                      int index = i;//当前位置
                      int num = a[index];//要插入的数
                      sort(index,num);
                      for(int i = 0;i < n;i++)
                          cout << a[i] << ' ';//输出数组
                      cout << endl;//因为输出样例换行了,所以我们也得换行
                  }
                  return 0;
              }
              
              • 1

              信息

              ID
              322
              时间
              1000ms
              内存
              256MiB
              难度
              4
              标签
              递交数
              973
              已通过
              452
              上传者