几种常用的排序方法

来源:互联网 发布:周东华知乎 编辑:程序博客网 时间:2024/06/06 12:57

一、冒泡排序 

void BubbleSort3(int a[],int n){int i,j;for (i=0;i<n-1;++i)//如果是4个数,比较3次就可以 n=3.比较两次0 1{for (j=0;j<n-i-1;j++){if (a[j]>a[j+1]){swap(a[j],a[j+1]);}}}}void swap(int& a,int& b){int temp;temp=a;a=b;b=temp;}


二、插入排序

void  InsertSort(int a[],int n){int i,j,k;for (i=1;i<n;++i){for(j=i-1;j>=0;--j)//使j指向插入元素的前一位置if (a[j]<a[i])break;if (j!=i-1)//如果break,也跳出次循环{int temp=a[i];for (k=i-1;k>j;--k){a[k+1]=a[k];}a[k+1]=temp;}}}

三、希尔排序:很像先将整个待排元素序列分割成若干个子序列(由相隔某个
“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,
待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插
入排序。


void ShellSortTest(int a[],int n){int i,j,gap,k;for (gap=n/3;gap>0;gap/=2){for (i=gap;i<n;i+=gap){for (j=i-gap;j>=0;--j){if (a[i]>a[j])break;}if (j!=i-gap){int temp=a[i];for(k=i-gap;k>j;k-=gap){a[k+gap]=a[k];}a[k+gap]=temp;}}}}
四、选择排序

void SelectSortTest(int a[],int n){int i,j,minIndex;for (i=0;i<n;++i){minIndex=i;for (j=i+1;j<n;++j){if (a[minIndex]>a[j])minIndex=j;}swap(a[i],a[minIndex]);}}






0 0
原创粉丝点击