C++實現選擇排序演算法(個人理解編寫)
阿新 • • 發佈:2021-01-24
原始碼:
#include <iostream>
#include <cstdlib> //rand() 和 srand()的標頭檔案
#include <ctime> //time的標頭檔案
#define MAXSIZE 10 //巨集定義陣列最大容量
using namespace std;
void make_sorted(int * array) //隨機生成100以內的亂序整數
{ //這裡把array[0]留著當中轉站用
srand((unsigned int)time(NULL));
cout << "隨機生成的10個數為:" ;
for(int i = 1; i < MAXSIZE + 1; i++)
{
array[i] = rand() % 100;
cout << array[i] << " ";
}
cout << endl;
}
void select_sort(int * array) //選擇排序
{
int mark; //mark標記選出來的最小值的位置
for (int i = 1; i < MAXSIZE; i++) //最外迴圈:排序總共需要排9次
{
array[0] = array[i]; //a[i]賦值給a[0]
for (int j = i; j < MAXSIZE + 1; j++) //一開始需要從10個數裡面挑選,然後逐次減少
{
if (array[0] > array[j]) //用來挑選最小值
{
array[0] = array[j]; //用小的那個值替代a[o]裡面的值
mark = j; //標記好最小值原本的位置
}
}
for (int k = mark - i; k > 0; k--) //最小值往前需要移mark - i 次
{
array[mark] = array[mark-1]; //前面的數往後移
mark--;
}
array[i] = array[0]; //全部移完之後,a[0]裡面的值位置就有了(a[0]是第i小的值)
}
cout << "選擇排序的結果為:";
for (int i = 1; i < MAXSIZE + 1; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
int main()
{
int * array;
array = new int [MAXSIZE];
make_sorted(array);
select_sort(array);
cout << endl;
delete [] array;
return 0;
}
演示結果截圖: