编程作业: 感性接触计算机程序
编程题#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; }
课程作业链接: