冒泡
- // 每次两两比对,交换,将大的送到右边,所以第i次比对到倒数第i个数即可
- def maopao(nums):
-     if len(nums) <= 1:
-         return nums
-     for i in range(len(nums)-1):// 一共需要n-1次遍历,每次找到一个,最后剩下一个最小的
-         for j in range(len(nums)-1-i)://每次遍历右侧已经有正确顺序的i+1个大数,且考虑到下面比对含有j+1所以j循环到len(nums)-1-i即可
-             if nums[j] > nums[j+1]:
-                 swap(nums,j,j+1)
选择排序
- //每次找到i右侧剩余里面最小的 跟目前的位置交换
- def xuanze(nums):
-     if len(nums) <= 1:
-         return nums
-     for i in range(len(nums)-1)://只需要遍历n-1次,剩下的是最大的
-         index = i
-         for j in range(i+1,len(nums)):
-             if nums[j] < nums[index]://保存最小的数的index
-                 index = j
-         swap(nums, i, index)
插入排序
- //跟打牌摸牌一样,每次将后面一个数依次交换到前面合适的位置
- def charu(nums):
-     if len(nums) <= 1:
-         return nums
-     for i in range(1,len(nums)):
-         index = i
-         for j in range(i):
-             if nums[index] < nums[i-1 - j]://直到碰到比自己小的
-                 swap(nums, index, i-1-j)
-                 index = i-1 - j
-             else:
-                 break
快排
- //为何先动j,是为了无论何时交换都保证移到左边的比K(选取的左端点,且目标从小到大)要小
- def kuaipai(nums,L,R):
-     if R == L :
-         return 0
-     i = L
-     j = R
-     K =nums[L]
-     while(i < j):
-         while(i < j and nums[j]>=K):
-             j -= 1
-         while(i < j and nums[i]<=K):
-             i += 1
-         if i == j :
-             nums[L] = nums[i]
-             nums[i] = K
-             kuaipai(nums, L, i)
-             kuaipai(nums, i+1, R)
-         else:
-             swap(nums, i, j)
并归排序
- //取一半数组,假设有序,然后合并数组
- def binggui(nums):
-     if len(nums) <= 1:
-         return nums
-     mid = int(len(nums)/2)
-     result = []
-     nums1 = binggui(nums[:mid])
-     nums2 = binggui(nums[mid:])
-     i = 0
-     j = 0
-     while(i < len(nums1) and  j < len(nums2)):
-         if nums1[i] <= nums2[j]:
-             result.append(nums1[i])
-             i+=1
-         elif nums1[i] > nums2[j]:
-             result.append(nums2[j])
-             j+=1
-     while(i<len(nums1)):
-         result.append(nums1[i])
-         i+=1
-     while(j<len(nums2)):
-         result.append(nums2[j])
-         j+=1
-     return result