排序的分类
排序分为内部排序和外部排序,这里我们主要介绍内部排序,而内部排序又分为以下几类:
1. 插入类排序
(1).直接插入排序:就是将待排序的元素插入到已排序的序列中
(2).希尔排序:非常类似于直接插入排序,只不过设了一个增量,然后按照这个增量来进行直接插入排序
2. 交换类排序
特点:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动
(1).冒泡排序:通过比较相邻两个元素的大小来交换位置
(2).快速排序:需要用到递归,对一个待排序的序列,取出其序列中第一个位置的值,然后将整个序列分为左右两部分(大于它的和小于它的),然后再对左半部分做同样的操作,同理右半部分也是
3. 选择类排序
(1).简单选择排序:每次选出一个最大值(或最小值)放到序列的前面
(2).堆排序:将一个无序序列转为一个大顶堆,然后将堆顶放到序列的后面
4.归并排序
先分割,再归并,也是一个递归的过程
所有排序算法的实现及详解
#include<stdio.h>
//不同种类的排序
void DirectInsertSort(int [],int );
void ShellSort(int [],int );
void BubbleSort(int [],int );
void QuickSort(int [],int ,int );
void SelectSort(int [],int );
void HeapInit(int [],int ,int );
void swap(int *,int *);
void HeapSort(int [],int );
void MergeSort(int [],int [],int ,int );
void Merge(int [],int [],int ,int ,int );
int main(){
int arr[]={
25,12,8,40,32,7,14,10,36,21,30,5,66,44};
int length=sizeof(arr)/sizeof(arr[0]);
int temp[length];
int i;
// DirectInsertSort(arr,length);
// ShellSort(arr,length);
// BubbleSort(arr,length);
// QuickSort(arr,0,13);
// SelectSort(arr,length);
// HeapSort(arr,length);
MergeSort(arr,temp,0,13);
for(i=0;i<length;i++){
printf("%d ",arr[i]);
}
return 0;
}
/*****************************************************************************
***********************************分界线************************************
*****************************************************************************/
/*
直接插入排序:1.从第二个元素开始,即i指向第二个元素,然后开始比较i与i-1的大小关系,如果arr[i]>arr[i-