直接插入排序(单链表排序)

assert函数介绍

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
 
  1.  
    #include <assert.h>
  2.  
    void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行:
一般用assert判断指针是否为空和一个条件,不要判断多个条件,请注意。

 

 

有序区  无序区
#include<iostream>
using namespace std;
int main()
{
    int a[]={98,76,109,34,67,190,80,12,14,89,1};
    int k=sizeof(a)/sizeof(a[0]);
    int i,j;
    for(i=1;i<k;i++)//循环从第2个元素开始   第一次循环找到待排序元素
    {
        if(a[i]<a[i-1])//从小到大排序,如果a[i]>a[i-1],说明有序,直接跳过,到下一个元素对比
        {
            int temp=a[i]; //记录无序区待排元素值
            for(j=i-1;j>=0 && a[j]>temp;j--)//第二次循环,从有序区尾部开始往前查找,找到在有序区插入的位置,j=i-1
            {
                a[j+1]=a[j];   //将插入位置后面元素往后移1位
            }    //若不进入第二个for循环,说明temp值比有序区元素都大,直接插入有序区元素尾部,即a[i]=temp
            a[j+1]=temp;//,经过了j--,再j+1,故此处执行a[j+1]=temp,将temp元素插入
        }
    }
    for(int f=0;f<k;f++)
    {
        cout<<a[f]<<"  ";
    }
    return 0;
}
 
posted @ 2020-11-28 22:56  txzing  阅读(561)  评论(0编辑  收藏  举报