【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,插入排序
整体代码
结果可以看出来:
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;
}
结果可以看出来:
相关文章推荐
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- c语言中冒泡排序、插入排序、选择排序算法比较
- c语言中冒泡排序、插入排序、选择排序算法比较
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- c语言中冒泡排序、插入排序、选择排序算法比较
- c语言实现选择排序、冒泡排序、插入排序
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- C语言:冒泡排序、选择排序、快速排序、插入排序、“shell”法
- c语言中冒泡排序、插入排序、选择排序算法比较
- 冒泡排序,插入排序,选择排序和快速排序-C语言
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 冒泡排序、插入排序、选择排序--C语言实现
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- 基础排序算法(冒泡排序、选择排序、插入排序)
- java实现 冒泡排序 插入排序 选择排序
- 冒泡排序、快速排序、选择排序、插入排序、shell排序C代码