问题描述
刚才我正在学习 C++ 编程语言,我决定通过编写代码来做到这一点。我尝试编写一个算法,它将数组中的项目从min
值开始排序为max
值,我得到一个像这样的整数数组
int arrayToSort[] = {3,5,3,1,8,7,2,4};
并尝试编写一个对该数组进行排序的算法。下面你可以看到源代码
算法一
int arrayToSort[] = {3,5,3,1,8,7,2,4};
int arrayToSortSize = sizeof(arrayToSort)/sizeof(int);
for(int i=1; i<arrayToSortSize; ++i) {
int* first = arrayToSort;
int* end = arrayToSort + arrayToSortSize;
for(first; first!=end-i; ++first) {
if (*first > *(first+1)) {
int temp = *first;
*first = *(first+1);
*(first+1) = temp;
}
}
}
该算法工作正确,并对数组中的所有元素进行正确排序,1, 2, 3, 3, 4, 5, 7, 8
但我想知道该算法是否正确进行此类排序,我的意思是在这种情况下,这是对所有元素进行排序的最短方法吗?
算法二
这里我实现了相同的算法,但这次我使用数组而不是指针,你可以在下面看到源代码:
int arrayToSortSize = sizeof(arrayToSort)/sizeof(int);
for(int i=1; i<arrayToSortSize; ++i) {
int* first = arrayToSort;
int* end = arrayToSort + arrayToSortSize;
for(int j=0; j<arrayToSortSize-i; j++) {
if (arrayToSort[j] > arrayToSort[j+1]) {
int temp = arrayToSort[j];
arrayToSort[j] = arrayToSort[j+1];
arrayToSort[j+1] = temp;
}
}
}
这个算法也很好用。它对所有项目进行了正确排序,但我想知道哪种算法更好用,可能是哪一种更快(如果其中一种是)?
问题
- 哪种算法更好用?
- 哪个算法更快?或者他们以相同的速度工作?
- 算法 I或算法 II能以更好的方式实现吗?
- 这个算法怎么叫?