总结并编写了部分常用的排序算法,包括前向、后向冒泡排序、简单选择排序、直接插入排序、希尔排序、堆排序、并归排序和快速排序。
具体的原理请参考《大话数据结构》。
#include<stdio.h>//从前向后冒泡void bubble(int arr[], int n){for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - 1 - i; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}//从后向前冒泡void bubble2(int arr[], int n){for (int i = 0; i < n - 1; i++){for (int j = n - 1; j > i; j--){if (arr[j - 1] > arr[j]){int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;}}}}//选择排序void selectsort(int arr[], int n){for (int i = 0; i < n ; i++){int index = i;for (int j = i + 1; j < n; j++){if (arr[index] > arr[j])index = j;}if (i != index){int temp = arr[i];arr[i] = arr[index];arr[index] = temp;}}}//插入排序void insertionsort(int arr[], int n){for (int i = 1; i < n; i++){int temp = arr[i];while (i >= 0 && arr[i - 1] > temp){arr[i] = arr[i - 1];i--;}arr[i] = temp;}}//希尔排序void shellsort(int arr[], int n){int gap = n;int temp;int i, j;do{gap = gap / 2;for (i = gap; i < n; i++){if (arr[i] < arr[i - gap]){temp = arr[i];for (j = i - gap; j >= 0 && temp < arr[j]; j -= gap)arr[j + gap] = arr[j];arr[j + gap] = temp;}}} while (gap > 1);}//堆排序void heapadjust(int arr[], int s, int m){int j;int temp = arr[s];for (j = (2*s)+1; j < m; j *= 2){if (j < m && arr[j] < arr[j + 1]) j++;if (temp > arr[j])break;arr[s] = arr[j]; s = j;}arr[s] = temp;}void heapsort(int arr[], int n){int i;for (i = (n/2)-1; i >= 0; i--)heapadjust(arr, i, n);for (i = 0; i < n; i++){int temp = arr[0];arr[0] = arr[n-1-i];arr[n-1-i] = temp;heapadjust(arr, 0, n-1-i-1);}}int main(){int arr[] = { 1,5,9,4,3,2,5,6,6,3,6,9,7,8,4,1,5,2 };//冒泡排序//bubble(arr, 18);//bubble2(arr, 18);//选择排序//selectsort(arr, 18);//插入排序//insertionsort(arr, 18);//希尔排序//shellsort(arr, 18);//堆排序heapsort(arr, 18);for (int i = 0; i < 18; i++)printf("%d ", arr[i]);return 0;}
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。