简单排序

简单排序算法的实现:冒泡排序、选择排序、插入排序

 

 

 

冒泡排序:两两比较相邻的数字,如果反序就交换,直到没有反序的为止。

 1 void bubble_sort(int *br,int len)
 2 {
 3     for(int i = 0;i<len-1;i++)
 4     {
 5         for (int j = len-1;j>=i;j--)
 6         {
 7             if(br[j] > br[j+1])
 8             {
 9                 swap(&br[j],&br[j+1]);
10             }
11         }
12     }
13 }
bubble_sort

但例如序列如果是{2,1,3,4,5,6,7,8,9};这只需要一趟冒泡就OK;所以改进的冒泡就来了:

 1 //冒泡排序优化
 2 void bubblesort(int *ar,int len)
 3 {
 4     bool flag = false;
 5     for (int i = 0;i<len-1;i++)
 6     {
 7         flag = false;
 8         for (int j = 0;j<len-1-i;j++)
 9         {
10             if (ar[j] > ar[j+1])
11             {
12                 flag = true;
13                 swap(&ar[j],&ar[j+1]);
14             }
15             {
16                 break;
17             }
18         }
19     }
20 }
bubblesort

复杂度呢两个for循环 所以O(N^2)

简单选择排序:选择一个值作为基准,如果遇到比它小的就替换,直到遇到最小的位置

 1 void select_sort(int *ar,int len)
 2 {
 3     int min = 0;
 4     for (int i=0;i<len-1;i++)
 5     {
 6         min = i;
 7         for (int j =i+1;j<len;j++)
 8         {
 9             if (ar[min] > ar[j])
10             {
11                 min =j ;
12             }
13         }
14         if (i != min)
15         {
16             swap(&ar[i],&ar[min]);
17         }
18         
19     }
20 }
select_sort

当然因为算法简单,所以效率不高,时间复杂度O(N^2),在性能上略优于冒泡

插入排序:通俗讲就跟打扑克牌一样,每次插入的时候将序排好

 

void insert_sort(int *ar,int len)
{
    int j;
    for (int i=1;i<len;i++)
    {
        if (ar[i]<ar[i-1])
        {
            ar[0] = ar[i];
            for (j = i-1;ar[j]>ar[0];j--)
            {
                ar[j+1] = ar[j];
            }
                ar[j+1] = ar[0];
        }

    }
}
inset_sort

 

时间复杂度大概在O(n^2/4)== O(n^2)

自己写的main函数测试:

 1 int main()
 2 {
 3     int arr[] = {9,1,5,8,3,7,4,6,2,0};
 4     int brr[] = {2,1,3,4,5,6,7,8,9};
 5     //bubble_sort(arr,sizeof(arr)/sizeof(arr[0]));
 6     //bubblesort(brr,sizeof(brr)/sizeof(brr[0]));
 7     int len = sizeof(arr)/sizeof(arr[0]);
 8     //select_sort(arr,len);
 9     insert_sort(arr,len);
10     show(arr,sizeof(arr)/sizeof(arr[0]));
11 }
test

因为里面用了自己实现的交换函数和打印函数

void swap(int *a,int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
void show(int *cr,int len)
{
    for (int i = 0;i < len;i++)
    {
        printf("%d\n",cr[i]);
    }
}

好吧 总结一下算复习算巩固!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值