选择排序
-- 把待排序的n个元素看作 有序部分和无序部分 ,依次选出第 i 小的元素
#include <iostream> #include<cstdio> using namespace std; int main(){ int a[5] = {4,5,1,3,2} ; int i,j ; for(i=0; i<5; ++i){ for(j=i+1;j<5;++j){ if(a[i]>a[j]){ // 如果找到更小的,交换之 int t = a[i] ; a[i] = a[j] ; a[j] = t ; } } } for(i=0; i < 5; ++i) printf("%d",a[i]); return 0 ; }
冒泡排序
-- 通过相邻元素之间的比较和交换使较小元素逐渐从后向前移动,就像水底的气泡一样逐渐向上冒。
#include<iostream> #include<cstdio> using namespace std ; int main(){ int a[6] = {1,4,2,3,6,5} ; int temp , n = 6 ; for(int i=0;i<n-1;i++){ // n个数, n-1轮冒泡 , 每一轮都将当前最小的数推到最前 for(int j= n-1 ; j>i ; j--){ if(a[j]<a[j-i]){ //交换两个数 temp = a[j]; a[j] = a[j-1]; a[j-i] = temp ; } } } // 打印排序结果 for(int i = 0 ; i<n ; i++){ printf("%d ",a[i]); } return 0 ; }
插入排序 --
把待排序的n个元素看作一个 有序部分和一个 无序排序部分 。 开始时有序部分只有1个元素,无序部分有n-1 个元素。排序过程中每次取出无序部分的第一个元素,将它插入到有序部分的合适位置,使有序部分元素个数增1,经过 n-1 次这样的处理后,有序部分有n个元素,排序结束。
#include<iostream> #include<cstdio> using namespace std ; int main(){ int a[] = {2,10,4,5,1,9} ; // 待排序元素用一个数组a表示,数组有n个元素 int temp , n = 6 , j ; for(int i = 1 ; i<n ;i++){ // i 表示插入次数,并进行 n-1 次插入 // 把待排序元素赋给 temp , temp 在 while 循环中并不改变 , 这样方便比较 ,并且它是要插入的元素 temp = a[i] ; j = i -1 ; // while 循环的作用是将比当前元素大的元素往后移动一个位置 while((j>=0)&&(temp<a[j])){ a[j+1] = a[j]; j--; // 顺序比较和移动,依次将元素后移动一个位置 } a[j+1] = temp ; // 元素后移后要插入的位置就空出了,找到该位置插入 } for(int i = 0 ;i<=5;i++){ printf("%d ", a[i]); } return 0 ; }