您的位置:首页 > 编程语言 > C语言/C++

【C语言】冒泡排序,选择排序,插入排序

2016-12-03 20:26 411 查看
利用顺序表进行三种排序

1,冒泡排序

void BubblesSort(SeqList *seq)//冒泡排序
{
assert(seq);
DataType i = 0;
DataType j = 0;
for (i = 0; i < seq->size; i++)
{
for (j = 0; j < seq->size - i - 1; j++)
{
DataType tmp = 0;
if (seq->array[j]>=seq->array[j + 1])
{
tmp = seq->array[j];
seq->array[j] = seq->array[j + 1];
seq->array[j + 1] = tmp;
}
}
}
}


2,选择排序

void SelectSort(SeqList *seq)//选择排序
{
assert(seq);
rsize_t begin = 0, end = seq->size - 1;
size_t min_index=0, max_index=0;
while (begin < end)
{
for (size_t i = begin; i <= end; i++)
{
if (seq->array[i]>seq->array[max_index])
max_index = i;
if (seq->array[i] < seq->array[min_index])
min_index = i;
}
swap(&seq->array[begin], &seq->array[min_index]);
if (begin == max_index)
{
max_index = min_index;
}
begin++;
swap(&seq->array[end], &seq->array[min_index]);
end--;
}
}

3,插入排序

void InsertSort(SeqList *seq)//插入排序
{
for (size_t i = 1; i < seq->size; ++i)
{
for (int j = i; j > 0; j--)
{
if (seq->array[j] < seq->array[j - 1])
{
swap(&seq->array[j], &seq->array[j - 1]);
}
}
}
}

整体代码

 

text.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

#define MAX_SIZE 10
typedef int DataType;

typedef struct Seqlist
{
DataType array[MAX_SIZE]; //存储数据的数组
size_t size; //存储数据的个数
}SeqList;
void PushBack(SeqList *seq, DataType x);//尾部插入数字
void BubblesSort(SeqList *seq);//冒泡排序
void SelectSort(SeqList *seq);//选择排序
void InsertSort(SeqList *seq);//插入排序

text.c
#include"text.h"
void PushBack(SeqList *seq, DataType x)//尾部插入数字
{
assert(seq);
if (seq->size >= MAX_SIZE)
{
printf("list is full!\n");
return;
}
else
{
seq->array[seq->size] = x;
seq->size++;
}
}
void BubblesSort(SeqList *seq)//冒泡排序
{
assert(seq);
DataType i = 0;
DataType j = 0;
for (i = 0; i < seq->size; i++)
{
for (j = 0; j < seq->size - i - 1; j++)
{
DataType tmp = 0;
if (seq->array[j]>=seq->array[j + 1])
{
tmp = seq->array[j];
seq->array[j] = seq->array[j + 1];
seq->array[j + 1] = tmp;
}
}
}
}

void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}

void SelectSort(SeqList *seq)//选择排序
{
assert(seq);
rsize_t begin = 0, end = seq->size - 1;
size_t min_index=0, max_index=0;
while (begin < end)
{
for (size_t i = begin; i <= end; i++)
{
if (seq->array[i]>seq->array[max_index])
max_index = i;
if (seq->array[i] < seq->array[min_index])
min_index = i;
}
swap(&seq->array[begin], &seq->array[min_index]);
if (begin == max_index)
{
max_index = min_index;
}
begin++;
swap(&seq->array[end], &seq->array[min_index]);
end--;
}
}

void InsertSort(SeqList *seq)//插入排序 { for (size_t i = 1; i < seq->size; ++i) { for (int j = i; j > 0; j--) { if (seq->array[j] < seq->array[j - 1]) { swap(&seq->array[j], &seq->array[j - 1]); } } } }
main.c
#include"text.h"
SeqList s;
void Text()//排序
{
printf("原数组:\n");
PushBack(&s, 8);
PushBack(&s, 2);
PushBack(&s, 3);
PushBack(&s, 4);
PushBack(&s, 7);
PushBack(&s, 9);
PushBack(&s, 1);
PushBack(&s, 5);
PushBack(&s, 6);
PushBack(&s, 0);
Print(&s);
printf("冒泡排序后:\n");
BubblesSort(&s);
Print(&s);
printf("选择排序后:\n");
SelectSort(&s);
Print(&s);
printf("插入排序后:\n");
InsertSort(&s);
Print(&s);
}
int main()
{
Text();
system("pause");
return 0;
}


结果可以看出来:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐