趁老师还在闹着玩,我还能在课上写的得出来...珍惜现在的时光
-
重新实现冒泡法排序,要求
(1)算法的最优时间复杂度为O(n);
(2)待排序数据从文件输入,排序结果输出到文件中;
(3)输入文件名和输出文件名由命令行参数传入;
-
设计一个算法,判断一组数是否有序;
-
实现简单选择法排序,要求同1.
#include<iostream> #include<fstream> using namespace std; //重新实现冒泡法排序,要求 // //(1)算法的最优时间复杂度为O(n); // //(2)待排序数据从文件输入,排序结果输出到文件中; // //(3)输入文件名和输出文件名由命令行参数传入; // //设计一个算法,判断一组数是否有序; // //实现简单选择法排序,要求同1. //冒泡排序 void bubbleSort(int* a, int n) { bool swapped; // 用于判断是否发生交换 for (int i = 0; i < n - 1; i++) // 第一层循环:对数组进行n-1次遍历,每次遍历都能确定一个最大的数 { swapped = false; // 每次遍历开始时假设没有发生交换 for (int j = 0; j < n - 1 - i; j++) // 第二层循环:从前往后依次比较相邻两个数的大小,推出一个最大的数到最后 { if (a[j] > a[j + 1]) { swap(a[j], a[j + 1]); // 交换两个元素的位置,swap交换的是元素的值 swapped = true; // 发生了交换 } } if (!swapped) { break; // 如果没有发生交换,代表数组已经有序 } } } // 实现读取文件并调用冒泡排序并写入文件的函数 void bubbleSortFile(string inputFile, string outputFile) { // 读取文件 ifstream fin(inputFile); if (!fin) { cout << "打开文件失败" << endl; return; } // 只要不为空,就一直读取到数组arr,最后记录长度length int length = 0; int* arr = new int[length]; int num = 0; while (fin >> num) { cout << num << " "; arr[length] = num; length++; } cout << endl; fin.close(); // 调用冒泡排序 bubbleSort(arr, length); // 写入文件 ofstream fout(outputFile); if (!fout) { cout << "打开文件失败" << endl; return; } for (int i = 0; i < length; i++) { fout << arr[i] << " "; cout << arr[i] << " "; } fout.close(); } int main(int argc, char* argv[]) { string inputFile = (const char*)argv[1]; string outputFile = (const char*)argv[2]; bubbleSortFile(inputFile, outputFile); //待排序数据从文件输入,排序结果输出到文件中; return 0; }