给出一个由数字组成的列表，在不使用内置排序函数的情况下，对数字进行排序，并输出排序后的列表。


1. 5 9 1 7 3
2. 19 33 12 52 40
3. 86 72 99 68 57
4. 102 75 120 88 65
1. 冒泡排序：从左到右依次比较相邻的两个数，如果左边的数大于右边的数，就交换它们的位置。重复这个比较过程，直到没有任何一对数字需要比较为止。

    ```
    def bubble_sort(arr):
        n = len(arr)
        for i in range(n):
            for j in range(0, n-i-1):
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
        return arr
    
    arr = [5, 9, 1, 7, 3]
    print(bubble_sort(arr))
    ```

2. 快速排序：从序列中选择一个数作为基准值（一般选择第一个数），将小于基准值的数都放到基准值左边，大于基准值的数都放到基准值右边，然后再对左右两个子序列分别进行同样的操作，直到整个序列有序。

    ```
    def quick_sort(arr):
        if len(arr) <= 1:
            return arr
        else:
            pivot = arr[0]
            left = [x for x in arr[1:] if x < pivot]
            right = [x for x in arr[1:] if x >= pivot]
            return quick_sort(left) + [pivot] + quick_sort(right)
    
    arr = [5, 9, 1, 7, 3]
    print(quick_sort(arr))
    ```

3. 插入排序：从第二个数开始依次将其插入到前面已排好序的序列中的正确位置中。

    ```
    def insertion_sort(arr):
        for i in range(1, len(arr)):
            j = i - 1
            key = arr[i]
            while j >= 0 and key < arr[j]:
                arr[j+1] = arr[j]
                j -= 1
            arr[j+1] = key
        return arr
    
    arr = [5, 9, 1, 7, 3]
    print(insertion_sort(arr))
    ```

4. 选择排序：每次从未排序的序列中选择最小的数，放在已排序的序列末尾。

    ```
    def selection_sort(arr):
        for i in range(len(arr)):
            min_idx = i
            for j in range(i+1, len(arr)):
                if arr[j] < arr[min_idx]:
                    min_idx = j
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
        return arr
    
    arr = [5, 9, 1, 7, 3]
    print(selection_sort(arr))
    ```