int *SelectionSort(int a[], int size) { for (int i = 0; i < size; i++) { //设置当前索引对应值为最小值 int min_index = i; for (int j = i; j < size; j++) { //如果有比记录的最小值小,则记录下来 if (a[j] < a[min_index]) min_index = j; } if (min_index != i) { //数值交换 Swap(a[min_index], a[i]); }
} return a; }
插入排序
排序思想:
从第一个元素开始,该元素可以认为已经被排序;
取出下一个元素,在已经排序的元素序列中从后向前扫描;
如果该元素(已排序)大于新元素,将该元素移到下一位置;
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
将新元素插入到该位置后;
重复步骤2~5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int *InsertionSort(int a[], int size) { for (int i = 1; i < size; i++) { int temp = a[i]; int index = i-1; while (index>=0 && temp<a[index]) { a[index + 1] = a[index]; --index; } a[index + 1] = temp; } return a; }
voidHalfInsertionSort(int a[], int size) { for (int i = 1; i < size; i++) { int l = 0; int h = size - 1; int temp = a[i]; while (l <= h) { int mid = (l + h) / 2; if (temp <= a[mid]) h = mid - 1; else l = mid + 1; }