博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法的C语言实现C代码
阅读量:4071 次
发布时间:2019-05-25

本文共 3832 字,大约阅读时间需要 12 分钟。

总结并编写了部分常用的排序算法,包括前向、后向冒泡排序、简单选择排序、直接插入排序、希尔排序、堆排序、并归排序和快速排序。

具体的原理请参考《大话数据结构》。

#include
#include
//从前向后冒泡 =======================================================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); }}//归并排序void merge(int arr[], int start, int mid, int end) {
int* result = (int*)malloc((end + 1) * sizeof(int)); int k = 0; int i = start; int j = mid + 1; while (i <= mid && j <= end) {
if (arr[i] < arr[j]) {
result[k++] = arr[i++]; } else {
result[k++] = arr[j++]; } } if (i == mid + 1) {
while (j <= end) result[k++] = arr[j++]; } if (j == end + 1) {
while (i <= mid) result[k++] = arr[i++]; } for (j = 0, i = start; j < k; i++, j++) {
arr[i] = result[j]; } free(result);}void mergeSort(int arr[], int start, int end){
if (start >= end) return; int mid = (start + end) / 2; mergeSort(arr, start, mid); mergeSort(arr, mid + 1, end); merge(arr, start, mid, end);}//快速排序 =======================================================int fun(int arr[], int low, int high){
int key; key = arr[low]; while (low < high) {
while (low < high && arr[high] >= key) high--; if (low < high) arr[low++] = arr[high]; while (low < high && arr[low] <= key) low++; if (low < high) arr[high--] = arr[low]; } arr[low] = key; return low;}void quicksort(int arr[], int start, int end){
int pos; if (start < end) {
pos = fun(arr, start, end); quicksort(arr, start, pos - 1); quicksort(arr, pos + 1, end); }}//=======================================================//=======================================================int main(){
int arr[] = {
9,5,1,4,0,7,2,6,8,3 }; //冒泡排序 //bubble(arr, 10); //bubble2(arr, 10); //选择排序 //selectsort(arr, 10); //插入排序 //insertionsort(arr, 10); //希尔排序 //shellsort(arr, 10); //堆排序 //heapsort(arr, 10); //归并排序 //mergeSort(arr, 0, 9); //快速排序 quicksort(arr, 0, 9); for (int i = 0; i < 10; i++) printf("%d ", arr[i]); return 0;}

转载地址:http://hhmji.baihongyu.com/

你可能感兴趣的文章
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
备忘:java中的递归
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>