// 排序.cpp: 定义控制台应用程序的入口点。
// 陈鹏20171125
#include "stdafx.h"
#include "stdio.h"
//----------插入排序开始---------------
void ChaRuPaiXu(int *Data,int length) { //传入数组和长度
int temp; //定义中间变量
for (int i = 0; i < length ; i++) { //n个数字只需排列n-1次就可以完成排序
temp = Data[i]; //从第一个数字开始往中间变量里面放
for (int j = i; j > 0 && temp < Data[j-1]; j--) { //先判断是不是第一个数字 如果是直接跳出 如果不是那就判断比前面的一个是不是小 并且递归
Data[j] = Data[j-1]; //符合条件 将当前数据的前一位 替换 给当前位
Data[j-1] = temp; //将当前的数据 替换 前一位的数据的值
}
}
}
//-----------插入排序结束-------------
//-----------冒泡排序开始-------------
void MaoPaoPaiXu(int *Data,int length) {
int temp;
for (int i = 0; i < length; i++) { //n个数字只需排列n-1次就可以完成排序
for (int j = 0; j < length - i-1; j++) { //往后每次少一个
if (Data[j] > Data[j + 1]) { //判断是不是大一些 大一些就往后移动
temp = Data[j];
Data[j] = Data[j + 1];
Data[j + 1] = temp;
}
}
}
}
//-----------冒泡排序结束-------------
//-----------希尔排序开始-------------
void XieErPaiXu(int *Data,int length) {
int temp;
for (int t = length / 2; t > 0; t /= 2) //步长
for (int i = 0; i < t; i++){ //每次步长里面的移动
for (int j = i + t; j < length; j += t) //移动步长的位置
if (Data[j] < Data[j - t]) {
int temp = Data[j];
int k = j - t;
while (k >= 0 && Data[k] > temp) { //最后一次
Data[k + t] = Data[k];
k -= t;
}
Data[k + t] = temp;
}
}
}
//-----------希尔排序结束-------------
//-----------选择排序开始-------------
void XuanZhePaiXu(int *Data,int length) {
int t,temp;
for (int j = 0; j < length; j++) {
temp = 0;
t = 0;
for (int i = 0; i < length-j; i++) { //循环找出最大值
if (temp < Data[i]) {
temp = Data[i]; //最大的值放入temp
t = i; //最大的位置放入t
}
}
Data[t] = Data[length - 1 - j] ; //交换值
Data[length - 1 - j] = temp;
}
}
//-----------选择排序结束-------------
//-----------木桶排序开始------------- 次排序适合用于单个数据大小不长的排序 速度特快 比其以上的排序至少快一个次方级
void MuTongPaiXu(int *Data,int length) {
int arr[100] = {0};//排序中最大的数字是多少就设置多少
for (int i = 0; i < length; i++) { //将值当做位数在arr数组中自增
arr[Data[i]]++;
}
int t = 0; //t用来记录位数
for (int i = 0; i < 100; i++) {
while (arr[i]) {
Data[t] = i; //将arr中不为零位数的位数给Data以实现排序
t++;
arr[i]--; //当数据里面有两个相同的数字
}
}
}
//-----------木桶排序结束-------------
/***************************************************************
****************************************************************
main开始
****************************************************************
****************************************************************/
int main()
{
//----------插入排序开始---------------
int cData[10] = { 1,2,3,7,8,9,4,5,6,0 }; //写入数据
printf("插入排序前的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d",cData[i]);
}
ChaRuPaiXu(cData, 10); //调用插入排序方法
printf("\n插入排序后的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", cData[i]);
}
printf("\n-----------------------------------\n");
//-----------插入排序结束-------------
//-----------冒泡排序开始-------------
int mData[10] = { 5,2,3,7,8,9,4,1,6,0 };
printf("冒泡排序前的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", mData[i]);
}
MaoPaoPaiXu(mData, 10); //调用插入排序方法
printf("\n冒泡排序后的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", mData[i]);
}
printf("\n-----------------------------------\n");
//-----------冒泡排序结束-------------
//-----------希尔排序开始-------------
int xData[10] = { 5,2,3,7,8,9,4,1,6,0 };
printf("希尔排序前的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", xData[i]);
}
XieErPaiXu(xData, 10); //调用插入排序方法
printf("\n希尔排序后的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", xData[i]);
}
printf("\n-----------------------------------\n");
//-----------希尔排序结束-------------
//-----------选择排序开始-------------
int zData[10] = { 5,2,3,7,8,9,4,1,6,0 };
printf("选择排序前的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", zData[i]);
}
XuanZhePaiXu(zData, 10); //调用插入排序方法
printf("\n选择排序后的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", zData[i]);
}
printf("\n-----------------------------------\n");
//-----------选择排序结束-------------
//-----------木桶排序开始-------------
int tData[10] = { 5,26,43,74,8,99,47,14,63,0 };
printf("木桶排序前的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", tData[i]);
}
MuTongPaiXu(tData, 10); //调用插入排序方法
printf("\n木桶排序后的数为\n");
for (int i = 0; i < 10; i++) {
printf("%5d", tData[i]);
}
printf("\n-----------------------------------\n");
//-----------木桶排序结束-------------
return 0;
}
排序——c
最新推荐文章于 2021-12-30 16:48:40 发布