一、冒泡排序
时间复杂度:O(N2)
原理:从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,直到数组结束。
void Bubble(int array[], int size) { int i,j; for(i=0; i<size; i++) { for(j=i+1; j<size; j++) { if(array[i]>array[j]) { array[i]=array[i]^array[j]; array[j]=array[i]^array[j]; array[i]=array[j]^array[i]; } } }
二、选择排序
时间复杂度:O(N^2),与冒泡排序相比减少了数组交换的次数
原理:选择一个 array[0]作为标杆,然后循环找到除这个外最小的 (查找小于标杆的最小 ),交换这两个,这时最小就被放到了array[0]上,然后再将array[1]作为标杆,从剩下未排序的 中找到最小 ,并交换。
void Sort(int array[], int size) { int i,j,k; for(i=0; i<size; i++) { k=i; for(j=i+1; j<size; j++) { if(array[j]<array[k]) { k=j; } } if(i!=k) { array[i]=array[i]^array[k]; array[k]=array[k]^array[i]; array[i]=array[i]^array[k]; } } }
三、插入排序
时间复杂度:插入排序对随即顺序的序列的时间复杂度也为O(N^2),但是对于基本有序的序列进行排序时间复杂度为O(N)
原理:插入排序的思想是数组是部门有序的,然后将无序的部分循环插入到已有序的序列中。
void InsertSort(int array[], int size) { int i,j,temp; for(i=2; i<size; i++) { temp=array[i]; for(j=i-1; j>=0 && array[j]>temp; j--) { array[j+1]=array[j]; } array[j+1]=temp; } }
原文:http://www.cnblogs.com/274914765qq/p/4379409.html