在排序中选择与冒泡排序应该是最基本与入门的
选择排序
基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
#include<stdio.h>
void xuanze(int *a,int n)
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0; i < n - 1;i++)
{
for(j = i + 1;j < n;j++)
{
if(a[i] > a[j])//找出数组中最小的数放在a[i]的位置
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
void print(int *a, int n)
{
int i = 0;
for(i = 0;i < n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int a[] = {10,9,8,7,6,5,4,3,2,1};
xuanze(a,sizeof(a)/sizeof(a[0]));
print(a,sizeof(a)/sizeof(a[0]));
return 0;
}
冒泡排序
基本思想:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
#include<stdio.h>
void maopao(int *a,int n)
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - i - 1; j++)
{
if(a[j] > a[j + 1])
{
temp = a[j];
a[j] =a[j + 1];
a[j + 1] = temp;
}
}
}
}
void print(int *a,int n)
{
int i = 0;
for(i = 0;i < n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int a[] = {10,9,8,7,6,5,4,3,2,1};
maopao(a,sizeof(a)/sizeof(a[0]));
print(a,sizeof(a)/sizeof(a[0]));
return 0;
}