三种排序方法:插入、冒泡、选择

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define SIZE 6


void print(int * a, int n);
void swap(int * a, int * b);
int * max(int * a, int n);
int * min(int * a, int n);
void insert(int * a, int n, int index, int value);
void sort_insert(int * a, int n);//插入排序
void sort_bubble(int * a, int n);//冒泡排序
void sort_select(int * a, int n);//选择排序


int main(void)
{
return 0;
}


void print(int * a, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%3d", a[i]);
}
printf("\n");
}


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


int * max(int * a, int n)
{
int * p, * max = a;
for(p = a + 1; p < a + n; p++)
{
max = (*max > *p ? max : p);
}
return max;
}


int * min(int * a, int n)
{
int * p, * min = a;
for(p = a + 1; p < a + n; p++)
{
min = (*min < *p ? min : p);
}
}


void insert(int * a, int n, int index, int value)
{
    int i;
    for(i = n - 2; i >= index; i--)
    {
        a[i + 1] = a[i];
    }
    a[index] = value;
}


/*
选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,

顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

*/


void sort_insert(int * a, int n)
{
int i;


//从大到小


for(i = n; i > 1; i--)
{
swap(max(a, i), a + i - 1);
print(a, n);
}


/*  从小到大
for(i = 0; i < n; i++)
{
swap(min(a + i, n - i), a + i);
print(a, n);
}
*/
}


/*
冒泡排序:各种沉底~
*/


void sort_bubble(int * a, int n)
{
int i, j;
for(i = n; i > 1; i--)
{
for(j = 0; j < i - 1; j++)
{
if(a[j] > a[j + 1])
{
swap(a + j, a + j + 1);
}
}
}
print(a, n);
}


/*

插入排序:从前一段的几个数中选出最大的,放在这一段的最后面,然后依次摆到正确的位置上。

*/


void sort_select(int * a, int n)
{
int i, j, t;
for(i = 1; i < n; i++)
{
t = a[i];


/*
for(j = i - 1; j >= 0 && t < a[j]; j--);
insert(a, i + 1, j + 1, t);
*/


for(j = i - 1; j >= 0 && t < a[j]; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
print(a, n);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值