插入排序、快速排序、归并排序、冒泡排序、选择排序、希尔排序。
如下:
#include <stdio.h> void swap(int& a, int& b){ int temp = a; a = b; b = temp; } void print(int* arr, int len){ int i; for(i=0;i<len;i++){ if(i==0) printf("%d",arr[i]); else printf(" %d",arr[i]); } puts(""); } //insert sort. find the samllest one and swap to the first place void insert_sort(int* arr,int len){ int i,j; for(i=0;i<len-1;i++){ for(j=i+1;j<len;j++){ if(arr[i]>arr[j]){ swap(arr[i],arr[j]); } } } print(arr,len); } //find a pivot, and cut the array into two part, each part is smaller and bigger this pivot. //doing this recursively void quick_sort(int* arr, int start, int end){ if(start>=end) return; int left=start, right=end, pivot; pivot = arr[left]; while(left<right){ while(left<right && arr[right]>=pivot) right--; if(left<right) arr[left++] = arr[right]; while(left<right && arr[left]<=pivot) left++; if(left<right) arr[right--] = arr[left]; } arr[left] = pivot; if(start<left-1) quick_sort(arr,start,left-1); if(end>left+1) quick_sort(arr,left+1,end); } //cut the array into two half recursively, and finally merge them in order void merge(int*arr, int start, int mid, int end){ int* temp1 = new int[mid-start+1]; int* temp2 = new int[end-mid]; int i; for(i=start;i<=mid;i++) temp1[i-start] = arr[i]; for(i=mid+1;i<=end;i++) temp2[i-mid-1] = arr[i]; int p1 = 0; int p2 = 0; for(i=start;i<=end;i++){ if(temp1[p1]>temp2[p2] && p2<=end-mid-1 || p1==mid+1-start) arr[i] = temp2[p2++]; else arr[i] = temp1[p1++]; } delete[] temp1; delete[] temp2; } void merge_sort(int* arr, int start, int end){ if(start>=end) return; int mid = (start+end)/2; merge_sort(arr,start,mid); merge_sort(arr,mid+1,end); merge(arr,start,mid,end); } //bubble sort void bubble_sort(int* arr, int len){ int i,j; for(i=len-1;i>=0;i--){ for(j=0;j<i;j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } //selection sort void select_sort(int* arr, int len){ int i, j; for(i=0;i<len-1;i++){ for(j=i+1;j<len;j++){ if(arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } //shell sort void shell_sort(int *data, int size) { for (int gap = size / 2; gap > 0; gap /= 2) for (int i = gap; i < size; ++i) { int key = data[i]; int j = 0; for( j = i -gap; j >= 0 && data[j] > key; j -=gap) { data[j+gap] = data[j]; } data[j+gap] = key; } } int main(){ int i; int arr1[] = {99,2,8,1,8,23,98,12,83,12,32,4}; insert_sort(arr1,sizeof(arr1)/sizeof(int)); int arr2[] = {99,2,8,1,8,23,98,12,83,12,32,4}; quick_sort(arr2,0,11); print(arr2,12); int arr3[] = {99,2,8,1,8,23,98,12,83,12,32,4}; merge_sort(arr3,0,11); print(arr3,12); return 0; }
浙公网安备 33010602011771号