#include<iostream> using namespace std; void swap(int &a ,int &b){ int temp; temp = a ; a = b; b = temp; } void bubblesort(int a[],int n) { int i,j; int temp; for(i=n-1;i>=0;i--) { for(j=0;j<i;j++) { if(a[j]>a[j+1]) { //交换 冒泡排序的思想,就是从前到后两个两个比较,每次把最大的交换在最后,一次遍历后,最后一位就是最大的有序数 swap(a[j],a[j+1]); } } } for(i=0;i<n;i++) cout<<a[i]<<" "; } //选择排序(一一比较,选择出最大最小的数,类似于冒泡排序(减少了交换)) void selectsort(int a[],int n) { int i,j,min; for(i=0;i<n;i++) { min = i; for(j=i+1;j<n;j++) { if(a[j]<a[min]) { min = j; } } if(i!=min) { swap(a[i],a[min]); } } for(i=0;i<n;i++) cout<<a[i]<<" "; } void insertsort(int a[],int n) { //插入排序,类似于扑克牌,默认第一个数是有序的,插入新的数,放在排好序列的位置; int preindex,i,current; for(i=1;i<n;i++)//默认第一个数是有序的 { preindex = i-1; current = a[i]; while(preindex>=0&&a[preindex]>current) { a[preindex+1] = a[preindex]; preindex--; //preindex--;一直到-1的时候条件终止; preindex+1表示空的位置,需要插入的位置 } a[preindex+1] = current; } for(i=0;i<n;i++) cout<<a[i]<<" "; } void swapInt(int * a,int*b) { int c=*a; *a=*b; *b=c; } void shell(int*data,int len) { if(len<=1||data==NULL) return; for(int div=len/2;div>=1;div=div/2)//定增量div,并不断减小 { for(int i=0;i<=div;++i)//分组成div组 { for(int j=i;j<len-div;j+=div)//对每组进行插入排序 for(int k=j;k<len;k+=div) if(data[j]>data[k]) swapInt(data+j,data+k);//交换两个数的值 } } for(int i=0;i<len;i++) cout<<data[i]<<" "; } int main(void) { int a[10]={10,9,8,7,6,5,4,3,2,1}; //bubblesort(a,10); //selectsort(a,10); //insertsort(a,10); shell(a,10); return 0; }