voidBubbleSort(int *arr, int len) { int i, j, tmp; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } }
voidSelectionSort(int *arr, int len) { int i, j, min, tmp; for (i = 0; i < len - 1; i++) { min = i; for (j = i + 1; j < len; j++) { if (arr[j] < arr[min]) { min = j;// 修改最小元 } } tmp = arr[min]; arr[min] = arr[i]; arr[i] = tmp; } }
voidmerge(int arr[], int low, int mid, int high){ int i, k; int *tmp = (int *)malloc((high-low+1)*sizeof(int)); //申请空间,使其大小为两个 int left_low = low; int left_high = mid; int right_low = mid + 1; int right_high = high;
voidswap(int *a, int *b){ int temp; temp = *a; *a = *b; *b = temp; }
voidQuickSort(int *arr, int maxlen, int begin, int end) { // printf("\nQuickSort(%d->%d)\n", begin, end); if (end - begin < 0){ return; } // 应该可以再加个等号?
// arr[begin] 为轴心点(与他比较)(亮黄色) int store = begin + 1; // 存储指数(紫色第一个) int i = begin + 1; // 试探(红色)
// 把比轴心点(arr[begin])要小的数据全部移动到紧贴轴心点的右侧 while (i < end){ if (arr[i] < arr[begin]){ swap(&arr[i], &arr[store]); // 移动过去的都是比轴心点小的 store++; // 自增,指向下一个准备交换的位置 // 数据点变绿 } i++; }