zoukankan      html  css  js  c++  java
  • 编程作业: 感性接触计算机程序

    编程题#1:实现冒泡排序
    描述

    请根据自己的理解编写冒泡排序算法,数组大小1000以内

    输入

    第一行是n,表示数组的大小

    接着n行是数组的n个元素

    输出

    排序之后的结果

    一个元素一行

    #include <iostream>
        using namespace std;
    
        int main() {
            int n, a[1000]; // 一共n个数,n不超过1000。a用来保存这些数
            cin >> n;  
            // 输入n个数  
            for (int i = 0; i < n; i++) {
              cin >> a[i];
        }  
        // 冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
        for (int i = 0; i < n - 1; i++) {
          for (int j = 1; j < n - i; j++) {      
            if (a[j - 1] > a[j]) {
              int temp = a[j];
              a[j] = a[j - 1];
              a[j - 1] = temp;
            }    
          }  
        }  
        // 依次输出
       for (int i = 0; i < n; i++) {
         cout << a[i] << endl;  
       }  
       return 0;
    }

    冒泡排序时间复杂度为O(n^2)

     

    编程题#2:奇偶排序(一)

    描述

    输入十个整数,将十个整数按升序排列输出,并且奇数在前,偶数在后。

    输入

    输入十个整数

    输出

    按照奇偶排序好的十个整数

    #include <iostream>
        using namespace std;
        
        int main() {
          int a[10];
          for (int i = 0; i < 10; i++) {
            cin >> a[i];
          }
          // 首先,我们把奇数放到数组左边,偶数放到数组右边
          int l = 0, r = 9; //用左手和右手分别指向数组两端
          while (l <= r) {
            bool leftIsOdd = a[l] % 2 == 1;
            bool rightIsEven = a[r] % 2 == 0;
            if (leftIsOdd) {
              l++;
            } else if (rightIsEven) {
              r--;
            } else if (!leftIsOdd && !rightIsEven) {
              int temp = a[l];
              a[l] = a[r];
              a[r] = temp;
            }
          }
          // 对l左边(奇数部分)冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
          int start = 0, end = l;
          for (int i = start; i < end - 1; i++) {
            for (int j = start + 1; j < start + end - i; j++) {
              if (a[j - 1] > a[j]) {
                int temp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = temp;
              }
            }
          }
          // 对l右边(偶数部分)冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
          start = l, end = 10;
          for (int i = start; i < end - 1; i++) {
            for (int j = start + 1; j < start + end - i; j++) {
              if (a[j - 1] > a[j]) {
                int temp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = temp;
              }
            }
          }
          for (int i = 0; i < 10; i++) {
            cout << a[i] << ' ';
          }
          return 0;
        }

     

    编程题#3:奇偶排序(二)

    描述

    和上题一样,但是要求用第二种解法

    输入

    输入十个整数

    输出

    按照奇偶排序好的十个整数

    提示

    先排序,再分别输出奇数、偶数

    #include <iostream>
        using namespace std;
        
        int main() {
          int a[10];
          for (int i = 0; i < 10; i++) {
            cin >> a[i];
          }  
          // 冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
          for (int i = 0; i < 9; i++) {
            for (int j = 1; j < 10 - i; j++) {      
          // 与刚才的冒泡排序不同,我们不只是通过较数字的大小决定顺序
          // 如果左边的为偶数,右边的为奇数,那么顺序也需要颠倒
          bool leftIsEven = a[j - 1] % 2 == 0;
          bool rightIsEven = a[j] % 2 == 0;
          if ((leftIsEven && !rightIsEven) ||
              (leftIsEven == rightIsEven && a[j - 1] > a[j])) {        
            int temp = a[j];        
            a[j] = a[j - 1];
            a[j - 1] = temp;
          }
        }
      }  
      for (int i = 0; i < 10; i++) {
        cout << a[i] << ' ';
      }  
      return 0;
    }

    课程作业链接:

    https://www.coursera.org/learn/jisuanji-biancheng/programming/dSvhJ/gan-xing-jie-hong-ji-suan-ji-cheng-xu

  • 相关阅读:
    文件过滤驱动隐藏目标文件
    POJ 3345 Bribing FIPA(树形DP)
    POJ 1018 Communication System(分组背包DP)
    无用的,ring0暴力枚举进程模块
    HDOJ 3496 Watch The Movie(基本二维背包)
    栈回溯法的一个例子
    代码这样写奇丑无比...编码前期要做好规划工作啊
    多核发dpc安全inline hook
    纵我不往,知识不来学习Java第一周心得
    对“TD信息树”的使用体验
  • 原文地址:https://www.cnblogs.com/zhangzhangwhu/p/6213996.html
Copyright © 2011-2022 走看看