Hide flag field from certain nodes in view
Install the Views PHP module and enable it. This will allow you to
embed php into a view cell.
Add a new nid/node id field to your View. Make sure to check the
“Exclude from display” checkbox.
Add a new Content: Published field to your View. Make sure to check the
“Exclude from display” checkbox.
Rearrange your fields so that your hidden nid field and published
field  at the top of all fields. This is important. It needs to be
“available” as an element to the custom php field we are about to
add, and if it’s after, the custom php field won’t see it.
Add a new Global: PHP field.
add the following code to the Output Code section of the field (in
php):

if ($row->status) {
  print flag_create_link("the_machine_name_of_your_flag", $row->nid);
}

 Use  delimiters to enclose PHP code. 
Click the apply button


use flag field in Sort criteria for sorting content mean flagged content on top
this is a tested solution.
hope this solve your problem.