【发布时间】:2015-01-17 17:49:24
【问题描述】:
我试图编写一个简单的排序函数来对 int 数组进行排序,并且我研究了一些简单的算法,例如冒泡排序。我编写了以下代码,它可以按升序对 int 数组进行排序:
void bubble_sort(float *scores, int size) {
int i = 0,j = 0;
float container = 0;
for(i = 0; i < size - 1; i++) {
for(j = 0; j < size - i - 1; j++) {
if(scores[j] > scores[j + 1]) {
container = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = container;
}
}
}
}
然后我想到了我通常如何在一张纸上对一组整数进行排序,我想为什么不编写一个可以做同样事情的代码。但事实证明,它并不像我第一眼所想的那么简单。 我注意到我通常使用一种简单的算法对一组整数进行升序排序,使用以下方法:
假设集合{4, 8, 1, 9, 0}
-
首先我创建一个空集,其中包含五个空位。
{ , , , , } - 我在集合中寻找最小值,在本例中为 0。
- 然后我将它添加到我的新集合中的第一个空白位置:
{0, , , , } - 最后我从原始集合中删除了我使用的元素:
{4, 8, 1, 9} - 我重复上述过程,直到我的原始集合中没有更多元素为止。
- 现在我有一个有序的集合。
所以我继续写了一个小函数,可以找到数组中的最小值:
int minimum(int *array, int size) {
int i, min = array[0];
for(i = 1; i < size; i++) {
if(array[i] < min) {
min = array[i];
}
}
return min;
}
我本来打算编写一个函数,它会接受一个数组并对其进行排序,直到我意识到我无法从数组中删除项目。我在这里不知所措,接下来该怎么办?
【问题讨论】:
-
将数组后面的元素向下复制一步,同时记住改变大小。如果您“删除”最后一个元素,只需减小大小即可。
-
你发明的算法叫做选择排序。通常要做的就是将最小值与您想要放置的位置交换。
-
c 数组只是内存中的字节,而不是对象,所以不能简单地修改它们
标签: c arrays algorithm sorting