以下是我的意见:
searchFirebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("FIREBASE",String.valueOf(dataSnapshot.getChildrenCount()));
String childrenCount = String.valueOf(datasnapshot.getChildrenCount());
if(childrenCount != null){
}else{
//No childrens in Firebase Database
}
//OR
if(!dataSnapshot.exists()){
//No data
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是我的代码(由于另一个尚未实现的原因而被称为count):
[3, 9, 8, 4, 6, 10, 2, 5, 7, 1]
我得到以下结果:
def Count(num_list):
global comparisons
if len(num_list) > 1:
pivot = num_list[0]
print "Pivot value is: %s, current list is: %s" % (pivot, num_list)
i = 1
j = 1
for j in range(len(num_list)):
if num_list[j] < pivot:
print "Swapping %s and %s" % (num_list[i], num_list[j])
num_list[i], num_list[j] = num_list[j], num_list[i]
print "List is now: %s" % (num_list)
i += 1
num_list[0], num_list[i-1] = num_list[i-1], num_list[0]
print "List before next recursive step: %s" % num_list
Count(num_list[:(len(num_list)/2)])
Count(num_list[(len(num_list)/2):])
print "List at the end of function: %s" % (num_list)
当我查看我制作的所有调试打印语句时,我发现它并没有将左半部分放在一起,但是我无法弄明白。
答案 0 :(得分:0)
@Natecat和@rcgldr感谢您指点我正确的方向。我的代码只是在第一次进行排序,因为递归调用正在排序从未返回的数组的切片副本。这违背了快速排序的定义,即快速排序。我更新到以下内容并且有效。
def Count(num_list, first, last):
if first < last:
global comparisons
comparisons += len(num_list)-1
pivot = num_list[first]
i = first + 1
# quick sort
for j in range(first+1,last):
if num_list[j] < pivot:
num_list[i], num_list[j] = num_list[j], num_list[i]
i += 1
# swap pivot with border index
num_list[first], num_list[i-1] = num_list[i-1], num_list[first]
# recurse
Count(num_list, first, i-1)
Count(num_list, i, last)