排序算法为程序员必备之基础,面试笔试常考不衰,这些排序算法各有特点,重要的是理解其过程
1. 直接插入排序 (<span style="color:#ff0000;">在有序序列基础上的插入</span>)
<span style="background-color: rgb(153, 255, 153);">void InsertSort(int a[],int len){
int i,j,temp;
for(i=1;i<len;i++){
temp=a[i];
for(j=i-1;j>=0;j--){
if(a[j]<temp) a[j+1]=a[j];
else break;
}
a[j+1]=temp;
}
}</span>
2. 冒泡排序( 交换排序,每一趟减少一个)
void BubbletSort(int a[],int len){
int i,j,temp;
for(i=0;i<len;i++)
for(j=1;j<len-i;j++){
if(a[j-1]>a[j]) { temp=a[j]; a[j]=a[j-1];a[j-1]=temp;}
}
}
3. 快速排序(分治递归)
void QuickSort(int a[],int low, int high){
int i,j;
int key;
if(low>=high) return;
i=low,j=high;
key=a[i];
while(i<j){
while(a[j]>=key&&i<j) j--;
if(i<j) a[i++]=a[j];
while(i<j&&a[i]<key) i++;
if(i<j) a[j--]=a[i];
}
assert(i==j);
a[i]=key;
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
4. 选择排序(得最小/最大值的索引)
void swap(int& a,int& b){
int temp;
temp=a;a=b;b=temp;
}
void SelectSort(int a[],int len){
int i,j;
int min; int temp;
for(i=0;i<len-1;i++){
min=i;
for(j=i+1;j<len;j++){
if(a[j]<a[min]) min=j;
}
//temp=a[i];a[i]=a[min];a[min]=temp;
swap(a[i],a[min]);
for(int k=0;k<len;k++) cout<<a[k]<<ends;cout<<endl;
}
}