码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2017-12-03 13:06:01      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:分享图片   ges   数组   bin   png   两种   logs   https   ++   

简单插入排序: 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

 插入排序可以分成两种 :直接插入排序和二分查找插入排序

①:直接插入排序:

    

#include<stdio.h>
void print(int * a){for(int i = 0 ;i<8;printf("%d ",a[i++]));printf("\n");}  //打印函数
void insert_sort(int* a,int len)
{
  
     int i,j,tmp;  
    for (i = 1; i < len; i++) {  
        tmp = a[i];  
          for(j = i -1;j>=0 && a[j]>tmp;j--)
          {
             a[j+1] =a[j]; 
          }
        a[j+1] = tmp;  
        printf("第%d趟:\n",i);
        print(a);
    }   
}

void main()
{
   int b[] = {3,534,23,2,1,5,87,4};
   printf("原数组为:\n");
   print(b);
   insert_sort(b,8); 
  
   printf("排序结果为:\n");
   print(b); 
}

运行结果为:

技术分享图片

   ②:二分插入排序:

#include<stdio.h>
void print(int * a){for(int i = 0 ;i<8;printf("%d ",a[i++]));printf("\n");}
   void  InsertSortByBinarySearch(int* arr ,int len) {
    for (int i = 1; i < len; i++) {
        int temp = arr[i];
        int low = 0, high = i - 1;
        int mid = -1;
        while (low <= high) {            
            mid = low + (high - low) / 2;            
            if (arr[mid] > temp) {               
                high = mid - 1;            
            } else {           
                low = mid + 1;            
            }        
        }        
        for(int j = i - 1; j >= low; j--) {            
            arr[j + 1] = arr[j];        
        }        
        arr[low] = temp;    
        printf("第%d趟:\n",i);
        print(arr);
    }
}

void main()
{
   int b[] = {3,534,23,2,1,5,87,4};
   printf("原数组为:\n");
   print(b);
   InsertSortByBinarySearch(b,8); 
  
   printf("排序结果为:\n");
   print(b); 
}

结果为:

技术分享图片


 

排序算法

标签:分享图片   ges   数组   bin   png   两种   logs   https   ++   

原文地址:http://www.cnblogs.com/LIUWEI123/p/7965743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!