冒泡排序
代码如下:
#include<stdio.h>
#include<stdlib.h>
//升序排序
void Bubble_sort(int a[], int size){
int i,j,temp;
for(int i=0 ; i<size-1 ;i++) //size-1 : 不用和自己比较
{
int flag =0;//比较记号
//在a[0]到a[size-i-1]之间比较,将最大的数放最后(即a[size-i-1])
for(int j=0 ; j<size-i-1 ; j++)
{
if(a[j] > a[j+1])//比较,大的在后面
{
temp = a[j]; a[j]= a[j+1]; a[j+1]=temp;
flag =1;
}
}
//若flag为0,则在该轮次没有交换动作,说明排序已经完成,break跳出循环
if(flag == 0 ) break;
}
}
void main()
{
int a[10];
printf("输入10个整形数据(整数):");
for(int i=0;i<10 ; i++)
scanf("%d",&a[i]);
Bubble_sort(a,10); //排序处理
printf("排序后的数组:\n");
for(int i=0;i<10 ; i++)
printf("%d ",a[i]);
system("pause");//屏幕暂停
}
简单选择排序
简单选择排序(Select Sort)示意图如下图所示。
代码如下:
#include<stdio.h>
#include<stdlib.h>
void SelectSort(int arr[],int n){
//minIndex用于记录每一趟中最小元素的下标
int i,j,temp,minIndex;
/*
外层循环,用于控制第1层到第n-1轮排序
第i轮循环时,后面部分的元素的下标范围为(i-1) 到 (n-1)
*/
for( i=1; i<n ; i++ ){
//将后面(未排序)部分的第1个元素赋予minIndex
minIndex = i-1;
for(j =i ; j < n ; j++ ){ //找到本轮循环中最小元素
if( arr[j]<arr[minIndex] ){
minIndex = j;
}
}
//若本轮中最小的元素不是后面部分的第1个元素,则需要交换元素
if(minIndex != i-1 ){
temp=arr[minIndex]; arr[minIndex]=arr[i-1]; arr[i-1]=temp;
}
}
}
void main(){
int a[10];
printf("输入10个整形数据(整数):");
for(int i=0;i<10 ; i++)
scanf("%d",&a[i]);
SelectSort(a,10); //排序处理
printf("排序后的数组:\n");
for(int i=0;i<10 ; i++)
printf("%d ",a[i]);
printf("\n");
system("pause");//屏幕暂停
}