我一直在执行一个关于冒泡排序的练习。
到目前为止,已设法通过数组进行冒泡排序。
比如说,我们有我们的array = ([5,6,7], [2,3,4])
我如何在不修改原始数组或使用排序的情况下对其进行冒泡排序?
该练习要求我不复制/复制/克隆/编辑或使用排序方法。
我的代码通过一个常规数组进行冒泡排序:
def bubble_sort(array)
is_sorted = false
until is_sorted
is_sorted = true
(array.count - 1).times do |i|
if array[i] > array[i + 1]
array[i], array[i + 1] = array[i + 1], array[i]
is_sorted = false
end
end
end
end阵列
发布于 2014-05-24 06:33:56
创建一个新数组,该数组是原始数组的副本,并对其进行排序。这将使您保留原来的数组,并有排序数组。
发布于 2015-02-10 18:54:44
你能把这两个数组组合成一个数组,然后运行一个典型的气泡排序吗?
def combine_arrays(arr1,arr2)
final = arr1 + arr2
sorted = true
while sorted do
sorted = false
(0..final.length - 2).each do |x|
if final[x] > final[x+1]
final[x], final[x+1] = final[x+1], final[x]
sorted = true
end
end
end
final
end
p combine_arrays([1,3,5],[2,4,6]) => [1, 2, 3, 4, 5, 6]发布于 2015-05-22 20:58:21
我认为对多维数组进行气泡排序的最简单方法是:
int main()
{
const size_t row = 4,col=6;
int temp;
int arr[row][col] = { { 6, 5, 4, 3, 2, 1 }, { 12, 11, 10, 9, 8, 7 }, {18, 17, 16, 15, 14, 13 }, { 24,23,22,21,20,1 } };
for (auto &row : arr)
{
for (int i = 0; i != col; ++i)
{
int flag = 0;
for (int j = 0; j != col-i - 1; ++j)
{
if (row[j]>row[j+1])
{
temp = row[j];
row[j] = row[j + 1];
row[j + 1] = temp;
flag = 1;
}
}
if (!flag)break;
}
}
for (auto &row : arr)
{
for (auto col : row)
cout << col << " ";
cout << endl;
}
return 0;}
https://stackoverflow.com/questions/23841993
复制相似问题