1.选择法排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
上代码:
#include <stdio.h>
int main()
{
int n;
int i,j,t;
int a[5]={5,4,3,2,1};
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<=3;j++)//外层循环
{
for(i=j+1;i<=4;i++)//内层循环
{
if(a[j]>a[i])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
for(n=0;n<5;n++)
printf("%d ",a[n]);
printf("\n");
}
printf("\n");
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
排序过程:
2.冒泡排序
指针重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
上代码:
#include <stdio.h>
int main()
{
int n;
int i,j,t;
int a[5]={5,4,3,2,1};
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=1;j<=4;j++)
{
for(i=0;i<=4-j;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(n=0;n<5;n++)
printf("%d ",a[n]);
printf("\n");
}
printf("\n");
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
排序过程:
两种排序方式:
#include<stdio.h>
//选择法排序
int SelectSort(int arr[],int num)
{
for(int i=0;i<num-1;i++)//总共需要排序num-1次
{
int index=i;//index表示无序区最大值的索引
for(int j=i+1;j<num;j++)
{
if(arr[j]>arr[index])
{
index=j;
}
}
//把无序区最大值放到无序区域的第一个位置
if(index!=i)
{
int temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
}
}
//冒泡法排序
void BubbleSort(int arr[],int num)
{
for(int i=0;i<num;i++)//总共需要冒泡num-1次
{
for(int j=num-1;j>i;j--)//从无序区中遍历冒泡
{
if(arr[j]>arr[j-1])//交换顺序
{
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
}
void PrintArray(int arr[],int num)
{
for(int i=0;i<num;i++)
{
printf("%d",arr[i]);
}
}
int main()
{
int arr[5]={1,6,3,8,9};
//BubbleSort(arr,5);
SelectSort(arr,5);
PrintArray(arr,5);
return 0;
}