1:改良版冒泡排序:时间复杂度O(n^2)
#include<stdio.h>
void maopao_sort(int*arr,int len)
{
int flag=0;
int temp;
for(int i=1;i<len;i++)
{
flag = 0;
for(int j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;
flag = 1;
}
}
if (flag == 0)
break;
}
}
2:选择排序:时间复杂度O(N^2)
void select_sort(int*arr,int len)
{
int max=0;
int temp;
for(int i=0;i<len-1;i++)
{
for(int j=i;j<len;j++)
{
if(arr[max]<arr[j])
{
max = j;
}
}
if(max!=i)
{
temp = arr[i];arr[i] = arr[temp];arr[temp] = temp;
}
}
}
3:插入排序:
void insert_sort(int*arr,int len)
{
int i,j;
int temp;
for(j=i; j>0&&temp<arr[j-1];j--)
{
arr[j] = arr[j-1];
}
arr[j]=arr[temp];
}
4:快速排序:时间复杂度(O(N*log2N )
int part(int *arr, int low, int high)
{
int x = arr[low]; //将第一个设为基准
while(low<high) //控制循环不至于一遍过后就结束
{
while(arr[high]>=x && low<high) //防止low超过high
{
high--;
}
arr[low] = arr[high];
while(arr[low]<=x && low<high) //防止low超过high
{
low++;
}
arr[high] = arr[low];
}
arr[low] = x; //将基准放入中间位置
return low; //将基准所在的位置返回
}
//定义快排函数
void quick_sort(int *arr, int low, int high)
{
if(low < high)
{
int mid = part(arr, low, high); //调用一趟排序函数
quick_sort(arr, low, mid-1); //对基准左侧的序列进行快速排序
quick_sort(arr, mid+1, high); //对基准右侧的序列进行快速排序
}
}
演示结果: