几种基本排序算法(一):冒泡,选择,插入------直接上代码
冒泡排序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define Max 10
//交换数据
void swap(int *str, int pos1, int pos2)
{
int tmp = str[pos1];
str[pos1] = str[pos2];
str[pos2] = tmp;
}
//排序
void Bub(int *buf,int len)
{
int i, j;
for (i = 0; i <len; i++)
{
for (j = len - 1; j>i; j--)
{
if (buf[j - 1] < buf[j])
swap(buf, j - 1, j);
}
}
}
//冒泡排序优化
void Bub1(int *buf,int len)
{
int i, j;
int flag = 1; //用来检查是否已经是有序,有序则退出循环,避免无用运算
for (i = 0; i < len&&flag==1; i++)
{
flag = 0;
for (j = len - 1; j>i; j--)
{
if (buf[j - 1] < buf[j])
{
flag = 1;
swap(buf, j - 1, j);
}
}
}
}
//打印
void Print(int *str,int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", str[i]);
}
printf("\n");
}
int main(void)
{
int arr[Max];
int i;
srand((unsigned int)time(NULL));
for (i = 0; i < Max; i++)
{
arr[i] = rand() % Max;
}
int len =Max;
printf("排序前:");
Print(arr,len);
printf("排序后:");
//Bub(buf,len);
//Print(buf,len);
Bub1(arr,len);
Print(arr,len);
system("pause");
return 0;
}
选择排序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define Max 10
//交换数据
void swap(int *str, int pos1, int pos2)
{
int tmp = str[pos1];
str[pos1] = str[pos2];
str[pos2] = tmp;
}
//选择排序
void SelectSort(int *buf, int len)
{
int i, j, minnum;
for (i = 0; i < len-1; i++)
{
minnum = i;
for (j = i + 1; j < len; j++)
{
if (buf[minnum]>buf[j])
minnum = j;
}
if (minnum != i)
{
swap(buf, i, minnum);
}
}
}
//打印
void Print(int *str, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", str[i]);
}
printf("\n");
}
int main(void)
{
int arr[Max];
int i;
srand((unsigned int)time(NULL));
for (i = 0; i < Max - 1; i++)
{
arr[i] = rand() % Max;
}
arr[Max - 1] = '\0';
int len = Max - 1;
printf("排序前:");
Print(arr, len);
printf("排序后:");
SelectSort(arr, len);
Print(arr, len);
system("pause");
return 0;
}
插入排序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define Max 10
//交换数据
void swap(int *str, int pos1, int pos2)
{
int tmp = str[pos1];
str[pos1] = str[pos2];
str[pos2] = tmp;
}
//插入排序,将后面无序数列的元素依次插入到前面有序序列中,插入排序在序列基本有序的情况下效率较高
void InsertSort(int *buf, int len)
{
int i, j, tmp;
for (i = 1; i < len; i++)
{
if (buf[i]>buf[i-1])
continue;
tmp = buf[i];
for (j = i - 1; j>=0&&tmp<buf[j]; j--)
{
buf[j + 1] = buf[j];
}
buf[j + 1] = tmp;
}
}
//打印
void Print(int *str, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", str[i]);
}
printf("\n");
}
int main(void)
{
int arr[Max];
int i;
srand((unsigned int)time(NULL));
for (i = 0; i < Max - 1; i++)
{
arr[i] = rand() % Max;
}
arr[Max - 1] = '\0';
int len = Max - 1;
printf("排序前:");
Print(arr, len);
printf("排序后:");
InsertSort(arr, len);
Print(arr, len);
system("pause");
return 0;
}
浙公网安备 33010602011771号