我使這個程序對數字列表進行排序。它應該是選擇排序,但我的老師說它更像泡泡排序,我需要修復它。任何有關我需要更換哪些部件的建議?選擇排序與泡泡排序C++
#include <iostream>
using namespace std;
void printArr(const int a[], int s);
void swapVals(int& v1, int& v2);
void sortArr(int a[], int s);
int main()
{
const int s = 20;
int arr[s] = {8, 38, 25, 4, 47, 47, 38, 36, 3, 33, 2, 19, 16, 30, 5, 47, 16,
38, 13, 1
};
cout << "Unsorted array:\n";
printArr(arr, s);
cout << "\n\n";
sortArr(arr, s);
cout << "Sorted Array:\n";
printArr(arr, s);
cout << "\n";
return 0;
}
void sortArr(int a[], int s)
{
for (int i = 0; i < s-1; i++)
{
int index = i;
for (int j = i + 1; j < s; j++)
if (a[j] < a[index])
index = j;
swapVals(a[index], a[i]);
}
}
void swapVals(int& v1, int& v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}
void printArr(const int a[], int s)
{
for (int i=0; i<s; i++)
{
cout << a[i];
if (i != s-1)
cout << " ";
}
}
在https://en.wikipedia.org/wiki/Selection_sort中的算法代碼示例中,有一個'iMin!= j'(在您的實現中是'index!= i''''')的測試 - 否則它會顯示是相同的。當爲其他人提供代碼以幫助它時,不要包含多餘的未使用的代碼,例如'FindMIn()'。也許你的老師對你的不一致的縮進感到困惑 - 爲你解決了這個問題(並且刪除了findMin() - 它只是一個分心)。 – Clifford
格式化它明確,添加一些意見,以表明你理解它,而不是隻是從網上覆制它,也許增加一個檢查,以避免與自己交換價值,並重新提交它 - 這是選擇排序實施,但它可能不明確。我還建議在單個語句代碼塊周圍使用大括號 - 它會更清晰 - 特別是如果您的縮進與您的縮進不一致。 – Clifford
這裏可能會有所幫助[鏈接](http://www.cs.csubs.edu/~msarr/visualizations/ComparisonSort.html) – Tyger