publicvoidSelectionSort(int[] array) { for (int i = 0; i < array.Length - 1; i++) { int tempMin = array[i]; //设当前指针所在位置为最小值,这个值可以没有,不过后面如果没有别的算法,就需要一个局部变量储存一个值 int tempIndex = i; //设当前指针为最小值所在指针
//从当前后一位开始,比较到最后一位 for (int j = i + 1; j < array.Length; j++) { //如果当前数比记录的最小数都小,那就更新最小数和最小数指针 if (tempMin > array[j]) { tempMin = array[j]; tempIndex = j; } }
//排列并获取轴数指针位置 privateintGetPivot(int[] array, int left, int right) { //默认左指针为中轴数,同时也相当于左指针取数 int pivotNum = array[left]; while (left < right) { //右指针移动 while (array[right] >= pivotNum && left < right) { right--; }
//右指针停止移动,此时左指针指向的的数应该已经无效 if (left < right) array[left] = array[right];
//左指针移动 while (array[left] < pivotNum && left < right) { left++; }
//左指针停止移动,此时右指针指向的数应该已经无效 if (left < right) array[right] = array[left]; }
//归并 privatevoidMerge(int[] array, int left, int right) { int i = left; //左半边指针 int mid = (left + right) / 2; //中间指针 int j = mid + 1; //右半边指针 int length = right - left + 1; //数组长度 int[] temp = newint[length]; //创建一个临时数组 int t = 0; //临时数组的指针
while (i <= mid && j <= right) { //一次比较两个数组中最小的数,并赋值给临时数组 if (array[i] <= array[j]) { temp[t++] = array[i++]; }
if (array[i] > array[j]) { temp[t++] = array[j++]; } }
//将左半边剩余的数复制给临时数组 while (i <= mid) { temp[t++] = array[i++]; }
//将右半边剩余的值复制给临时数组 while (j <= right) { temp[t++] = array[j++]; }
//将临时数组的值复制给目标数组 t = 0; i = left; while (t < length) { array[i++] = temp[t++]; } }