dataList類定義:
class dataList { private: int number; int *data, *bdata;//data數組是隨機生成的,排序更改的都是這個數組,bdata就是用來存放排序前的 void reset();//重置數組爲初始生成的亂序狀態 public: dataList(int num); void Select_sort(); void Insert_sort(); void Qick_sort(int start, int end); void print(int kind); };
構造函數
dataList::dataList(int num) { data = new int[num]; bdata = new int[num]; number = num; for (int i = 0; i < number; i++) { data[i] = rand() % 100; bdata[i] = data[i]; } }
選擇排序
void dataList::Select_sort()//最簡單的選擇排序 { for (int i = 0; i < number; i++) { for (int j = i; j < number; j++) { if (data[i] > data[j]) { int temp = data[j]; data[j] = data[i]; data[i] = temp; } } } }
插入排序
void dataList::Insert_sort() { for (int i = 0; i <number; ++i) { for (int j = i; j > 0; --j) { if (data[j] < data[j - 1]) { int temp = data[j]; data[j] = data[j - 1]; data[j - 1] = temp; } } } }
快速排序
void dataList::Qick_sort(int start, int end) { int i = start; int j = end; int temp = data[i]; if (i < j) { while (i < j) { while (i < j && data[j] >= temp) j--; if (i < j) { data[i] = data[j]; i++; } while (i < j && temp > data[i]) i++; if (i < j) { data[j] = data[i]; j--; } } data[i] = temp; Qick_sort(start, i - 1); Qick_sort(i + 1, end); } }
菜單
void menu()//模擬菜單選項 { cout << "---------------------排序小程序[email protected]" << endl; cout << "| |" << endl; cout << "| 1____________簡單選擇排序 |" << endl; cout << "| 2____________直接插入排序 |" << endl; cout << "| 3____________快速排序 |" << endl; cout << "| 4____________退出系統 |" << endl; cout << "| |" << endl; cout << "---------------------------------------------------------" << endl; }
額,複製過來格式就亂了,自己對齊吧
測試函數
int main() { srand(time(NULL)); dataList L(maxsize); menu(); while (1) { int select; cout << "請輸入您的選擇:"; cin >> select; switch (select) { case 1://簡單選擇排序 { L.Select_sort(); L.print(select); break; } case 2://直接插入排序 L.Insert_sort(); L.print(select); break; case 3://快速排序 L.Qick_sort(0,maxsize-1); L.print(select); break; case 4: system("pause"); return 0; default: cout << "您輸入的選項有誤,請重新輸入:"; } } }
完整代碼
#include<iostream> #include<ctime> const int maxsize = 10; using namespace std; class dataList { private: int number; int *data, *bdata;//data數組是隨機生成的,排序更改的都是這個數組,bdata就是用來存放排序前的 void reset();//重置數組爲初始生成的亂序狀態 public: dataList(int num); void Select_sort(); void Insert_sort(); void Qick_sort(int start, int end); void print(int kind); }; dataList::dataList(int num) { data = new int[num]; bdata = new int[num]; number = num; for (int i = 0; i < number; i++) { data[i] = rand() % 100; bdata[i] = data[i]; } } void dataList::Select_sort()//最簡單的選擇排序 { for (int i = 0; i < number; i++) { for (int j = i; j < number; j++) { if (data[i] > data[j]) { int temp = data[j]; data[j] = data[i]; data[i] = temp; } } } } void dataList::reset() { for (int i = 0; i < number; i++) { data[i] = bdata[i]; } } void dataList::Insert_sort() { for (int i = 0; i <number; ++i) { for (int j = i; j > 0; --j) { if (data[j] < data[j - 1]) { int temp = data[j]; data[j] = data[j - 1]; data[j - 1] = temp; } } } } void dataList::Qick_sort(int start, int end) { int i = start; int j = end; int temp = data[i]; if (i < j) { while (i < j) { while (i < j && data[j] >= temp) j--; if (i < j) { data[i] = data[j]; i++; } while (i < j && temp > data[i]) i++; if (i < j) { data[j] = data[i]; j--; } } data[i] = temp; Qick_sort(start, i - 1); Qick_sort(i + 1, end); } } void dataList::print(int kind) { cout << "原始數據: "; for (int i = 0; i < number; i++) { cout << bdata[i] << " "; } cout << endl; switch (kind) { case 1: cout << "簡單選擇排序後:"; break; case 2: cout << "直接插入排序後:"; break; case 3: cout << "快速排序後: "; break; } for (int i = 0; i < number; i++) { cout << data[i] << " "; } reset();//打印完就需要重置待排序數組啦 cout << endl; } void menu()//模擬菜單選項 { cout << "---------------------排序小程序[email protected]" << endl; cout << "| |" << endl; cout << "| 1____________簡單選擇排序 |" << endl; cout << "| 2____________直接插入排序 |" << endl; cout << "| 3____________快速排序 |" << endl; cout << "| 4____________退出系統 |" << endl; cout << "| |" << endl; cout << "---------------------------------------------------------" << endl; } int main() { srand(time(NULL)); dataList L(maxsize); menu(); while (1) { int select; cout << "請輸入您的選擇:"; cin >> select; switch (select) { case 1://簡單選擇排序 { L.Select_sort(); L.print(select); break; } case 2://直接插入排序 L.Insert_sort(); L.print(select); break; case 3://快速排序 L.Qick_sort(0,maxsize-1); L.print(select); break; case 4: system("pause"); return 0; default: cout << "您輸入的選項有誤,請重新輸入:"; } } }
測試結果