C语言学习笔记:排序方法:冒泡排序、选择排序、插入排序
程序员文章站
2022-07-15 08:46:53
...
一:冒泡排序
//一次次比较 把最大的放到最后
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int a[] = { 2, 4, 6, 5, 3, 1 };
int i = 0;
int j = 0;
int n = 6;
int tmp = 0;
printf("排序前:");
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
//排序
for (i = 0; i < n - 1; i++)
{
for (j = 0; j<n - i - 1; j++)
{
if (a[j]>a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
printf("排序后:");
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
return 0;
}
二:选择排序
//和冒泡思想差不多 它是把最小的放到最前 换汤不换药
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int a[] = { 2, 4, 6, 5, 3, 1 };
int i = 0;
int j = 0;
int n = 6;
int tmp = 0;
printf("排序前:");
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
//排序
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j<n; j++)
{
if (a[i]>a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
printf("排序后:");
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
return 0;
}
三:插入排序
//插入值在有序中比较 大的往后移一位 找到正确位置后赋值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int a[] = { 2, 4, 6, 5, 3, 1 };
int i = 0;
int j = 0;
int n = 6;
int tmp = 0;
printf("排序前:");
for ( i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
//排序
for (i =0; i<n; ++i)
{
tmp = a[i];//要插入的值
for (j = i - 1; j>=0 && a[j] > tmp; j--)
{
a[j + 1] = a[j];//向后移位
}
a[j + 1] = tmp;//位置赋值
}
printf("排序后:");
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
return 0;
}
插入的递归思想:
转自:http://blog.csdn.net/morewindows/article/details/6665714
void Insert(int *a, int n)//把数组a的第n个数插入前n-1个数中,注意前n-1个数已经是排好序的了
{
int i = n - 1;
int key = a[n];
while ((i >= 0) && (key < a[i]))
{
a[i + 1] = a[i];
i--;
}
a[i + 1] = key;
return;
}
void InsertionSort(int *a, int n)//递归插入,跟求阶乘的思想一样,前n-1个排好序的数组,是建立在前n-2个排好序的数组的基础上插出来的
{
if (n > 0)
{
InsertionSort(a, n - 1);
Insert(a, n);
}
else
return;
}
上一篇: C语言学习——冒泡排序