Pythonの集合には「順序」という概念がありませんので、集合をソートしたいという発想そのものが無いと思います。ですので、集合ならではのソートアルゴリズムを求めるのではなく、リストとしてのソートアルゴリズムを求めるべきと思います。
*上記の「順序」は、ソートとしての順序ですので、要素を列挙して順番に取り出せることとは別の意味です。
*集合の特性である「重複要素が無い」ことを生かした、リストソートのアルゴリズムがあるかもしれません。
Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。ただしこれは集合をソートしているのではなく、集合から列挙した要素の並び(リストと等価な構造)をソートしています。
実際、質問者様が例示されているnodes = [0,1,2,2,3,1,4]
は、setに入れた時点で、以下に示すように順序は無くなり集合の列挙順番での表示となります(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)。なお、これは質問者様が期待するソート結果順に並んでいると思いますので、列挙された結果をさらにsorted()や他の独自ソートアルゴリズムにかけることは不要になっています。たたし、この列挙順はPythonに保証されているわけではありませんので、set()することでソートされるとは考えないようにお願いします。また、他の順番でソートしたい、という要望も、列挙した後のリストと等価な構造に対しての操作であり、結果はリストとして保持すると思います。その結果を再度集合に変換した時点で、順序が無くなりますので、操作したことは無に帰します。
Python
1nodes = [0,1,2,2,3,1,4]
2print(set(nodes))
3#{0, 1, 2, 3, 4}
集合とリストの違いを確認するためのサンプルコード
Python
1import random
2
3num = 10
4random_list = random.sample(list(range(num)), num)
5print('random_list =', random_list)
6random_set = set(random_list)
7print('random??_set =', random_set)
8sorted_list = sorted(random_list)
9print('sorted_list =', sorted_list)
10sorted_set = set(sorted(random_set))
11print('sorted_set =', sorted_set)
12print('random_list == sorted_list ?', random_list == sorted_list)
13print('random_set == sorted_set ?', random_set == sorted_set)
サンプルコードの実行結果
random_list = [2, 5, 4, 9, 0, 3, 1, 6, 7, 8]
random??_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
sorted_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sorted_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
random_list == sorted_list ? False
random_set == sorted_set ? True