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

    xiaoxiao2021-12-14  21

    利用顺序表进行三种排序

    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; }

    结果可以看出来:

    转载请注明原文地址: https://ju.6miu.com/read-970940.html

    最新回复(0)