#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
// 顺序表的定义
typedef struct SeqList
{
int data[100] ;
int length ;
} SeqList ;
//顺序表的初始化
void Init( SeqList * S )
{
S->length = 0 ;
}
// 插入
void Insert( SeqList * S , int elem )
{
S->data[S->length++] = elem ;
}
// 在顺序表中将下表为min和下标为i的元素调换位置
void Swap( int i , int min , SeqList * S )
{
int tmp = S->data[i] ;
S->data[i] = S->data[min] ;
S->data[min] = tmp ;
}
// 选择排序
void SelectSort( SeqList * S )
{
int min = 0 ; // 记录当前最小数的下标
for( int i = 0 ; i < S->length - 1 ; i++ )
{
min = i ;
for( int j = i + 1 ; j < S->length ; j++ )
{
if( S->data[j] < S->data[min] )
{
min = j ;
}
}
Swap( i , min , S ) ;
}
}
// 直接插入排序
void InsertSort( SeqList * S )
{
int tmp ;
for( int i = 1 ; i < S->length ; i++ )
{
for( int j = 0 ; j < i ; j++ )
{
if( S->data[i] < S->data[j] )
{
tmp = S->data[i] ;
for( int k = i ; k >= j ; k-- )
{
S->data[k] = S->data[k-1] ;
}
S->data[j] = tmp ;
}
}
}
}
// 将线性表中的元素输出
void Print( SeqList * S )
{
for( int i = 0 ; i < S->length ; i++ )
{
printf("%d " , S->data[i] ) ;
}
}
//测试
int main()
{
SeqList S ;
Init( &S ) ;
Insert( &S , 4 ) ;
Insert( &S , 2 ) ;
Insert( &S , 9 ) ;
Insert( &S , 1 ) ;
Insert( &S , 3 ) ;
Print( &S ) ;
printf("\n" ) ;
SelectSort( &S ) ;
InsertSort( &S ) ;
Print( &S ) ;
printf("\n") ;
return 0 ;
}
简单选择排序与直接插入排序
最新推荐文章于 2023-05-10 18:13:25 发布