"test.c"
<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include "Sort.h"
int main()
{
int arr[] = {6,3,8,1,4,9,5,0,2,7};
int size = sizeof(arr)/sizeof(arr[0]);
BubbingSort(arr,size);
//SelectSort(arr,size);
//InsertSort(arr,size);
PrintSort(arr,size);
system("pause");
return 0;
}</span>
"Sort.h"
<span style="font-size:18px;">#ifndef __SORT_H__
#define __SORT_H__
#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
void SelectSort(int* arr,int size);//选择排序
void InsertSort(int* arr,int size);//直接插入排序
void BubbingSort(int* arr,int size);//冒泡排序
void PrintSort(int* arr,int size);
#endif//__SORT_H__</span>
"Sort.c"
<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include "Sort.h"
//void BubbingSort(int* arr,int size)
//{
// int i = 0;
// int j = 0;
// int tmp = 0;
// assert(arr);
//
// for (i = 0;i < size-1; i++) //排序的趟数
// {
// for (j = 0;j < size-1-i;j++)//每次排序的个数
// {
// if (arr[j] > arr[j+1])//升序
// {
// tmp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = tmp;
// }
// }
// }
//}
//优化一次后的冒泡排序 优化趟数 优化后的排序算法对已经有序的部分数组值将不再进行排序,减少复杂度
//void BubbingSort(int* arr,int size)
//{
// int i = 0;
// int j = 0;
// int tmp = 0;
// int flag = 0;//标记
// assert(arr);
//
// for (i = 0;i < size-1; i++) //排序的趟数
// {
// flag = 0;
// for (j = 0;j < size-1-i;j++)//每次排序的个数
// {
// if (arr[j] > arr[j+1])//升序
// {
// tmp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = tmp;
// flag = 1;//如果交换过了那么就将标记变换
// }
// }
// if (flag == 0)//如果经过一趟的排序,没有任何一个数组的值交换,那么表明数组中已经有序
// {
// break;
// }
// }
//}
//优化两次后的冒泡排序 优化趟数里次数的比较
void BubbingSort(int* arr,int size)
{
int i = 0;
int j = 0;
int tmp = 0;
int flag = 0;//标记
int m = size-i-1;//初始化为冒泡排序比较次数的限制条件
int n = 0;
assert(arr);
for (i = 0;i < size-1; i++) //排序的趟数
{
flag = 0;
for (j = 0;j < m;j++)//每次排序的个数
{
if (arr[j] > arr[j+1])//升序
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = 1;//如果交换过了那么就将标记变换
n = j; //记录当前交换了数值的下标
}
}
m = n; //将记录下来的下标值赋值给j循环的限制条件
if (flag == 0)//如果经过一趟的排序,没有任何一个数组的值交换,那么表明数组中已经有序
{
break;
}
}
}
void SelectSort(int* arr,int size)
{
int i = 0;
int j = 0;
int min = 0;
int tmp = 0;
assert(arr);
for (i = 0;i < size;i++)
{
min = i;
for (j = i+1;j < size;j++)
{
if (arr[min] > arr[j])
{
min = j;//记住当前最小值的下标值
}
}
tmp = arr[min];//找出最小的值,下标从0开始交换
arr[min] = arr[i];
arr[i] = tmp;
}
}
void InsertSort(int* arr,int size)
{
int i = 0;
int j = 0;
int tmp = 0;
assert(arr);
for (i = 1;i < size;i++)//i=1认为只有一个数字是有序的
{
if(arr[i-1] > arr[i])
{
tmp = arr[i]; //保存当前需要排序的值
for (j = i; j>0 && arr[j-1] > tmp;j--)
{
arr[j] = arr[j-1];
}
arr[j] = tmp;
}
}
}
void PrintSort(int* arr,int size)
{
int i = 0;
assert(arr);
for (i = 0;i < size;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}</span>