排序演算法-c實現
阿新 • • 發佈:2018-12-10
#include <stdio.h> #include <stdlib.h> #include<cstring> void quicksort(int arr[],int left,int right) { if (left > right) { return; }; int pivot = arr[left]; int i = left; int j = right; while (i < j) { while (arr[j] >= pivot && i < j){ j--; }; while (arr[i] <= pivot && i < j) { i++; }; if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }; }; arr[left] = arr[i]; arr[i] = pivot; quicksort(arr, left, i - 1); quicksort(arr, i + 1, right); }; void merge(int arr[], int left, int mid, int right) { int len1 = mid - left + 1; int len2 = right - mid; int *a = new int[len1+1]; int *b = new int[len2+1]; for (int i = 0; i < len1; i++) { a[i] = arr[left + i]; }; for (int j = 0; j < len2; j++) { b[j] = arr[mid + 1 + j]; }; int i = 0, j = 0; a[len1] = b[len2] = INT_MAX; for (int k = left; k <= right; k++) { if (a[i] < b[j]) { arr[k] = a[i]; i++; } else { arr[k] = b[j]; j++; } } }; void mergesort(int arr[], int left, int right) { if (left < right) { int mid = (left + right) / 2; mergesort(arr, left, mid); mergesort(arr, mid + 1, right); merge(arr, left, mid, right); } }; void bubblesort(int arr[],int len) { for (int i = len - 1; i > 0; i--) { for (int j = 0; j <= i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }; int main() { int arr[] = { 1,7,9,5,7 }; //quicksort(arr, 0, 4); //mergesort(arr, 0, 4); bubblesort(arr, 5); for (int i = 0; i < 5; i++) { printf("%d", arr[i]); }; system("pause"); return 0; }
其中有快速排序,氣泡排序和歸併排序。