冒泡排序
一种典型的交换排序
类似水冒泡,大元素经不断的交换由水底慢慢的浮出
从头到尾,循环比较两相邻的元素
大的元素移到后面,小的放前面-每次循环,大的元素会排到最后
代码如下:
#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个元素赋予minIndexminIndex = 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");//屏幕暂停
}