标准C语言算法
#include <stdio.h> void bubbleSort(int arr[], int count) { int i = count, j; int temp; while(i > 0) { for(j = 0; j < i - 1; j++) { if(arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } i--; } } int main() { int i; int arr[] = {5, 8, 9, 0, 2, 3, 4, 6, 7, 1}; bubbleSort(arr, 10); for(i = 0; i < 10; i++) printf("%4d", arr[i]); return 0; }
#include <stdio.h> void insertSort(int *array,unsigned int n) { int i,j; int temp; for(i = 1; i < n; i++) { temp = *(array + i); for(j = i;j > 0 && *(array + j - 1) > temp;j--) { *(array + j) = *(array + j - 1); } *(array + j) = temp; } } int main() { int i; int arr[] = {5, 8, 9, 0, 2, 3, 4, 6, 7, 1}; insertSort(arr, 10); for(i = 0; i < 10; i++) printf("%4d", arr[i]); return 0; }
#include <stdio.h> void mergeSort(int *list, int length) { int i, leftMin, leftMax, rightMin, rightMax, next; int *tmp = (int*)malloc(sizeof(int) * length); if (tmp == NULL) { fputs("Error: out of memory\n", stderr); abort(); } for (i = 1; i < length; i *= 2) for (leftMin = 0; leftMin < length - i; leftMin = rightMax) { rightMin = leftMax = leftMin + i; rightMax = leftMax + i; if (rightMax > length) rightMax = length; next = 0; while (leftMin < leftMax && rightMin < rightMax) tmp[next++] = list[leftMin] > list[rightMin] ? list[rightMin++] : list[leftMin++]; while (leftMin < leftMax) list[--rightMin] = list[--leftMax]; while (next > 0) list[--rightMin] = tmp[--next]; } free(tmp); } int main() { int i; int arr[] = {5, 8, 9, 0, 2, 3, 4, 6, 7, 1}; mergeSort(arr, 10); for(i = 0; i < 10; i++) printf("%4d", arr[i]); return 0; }
----备注:参考自维基百科(参考率80%)