数据结构排序1

来源:互联网 发布:linux修改hosts文件 编辑:程序博客网 时间:2024/06/07 05:24

void swap(int a[],int i,int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}void printfA(int a[],int len){int i;for(i = 0;i < len;i++){printf("%4d",a[i]);}printf("\n");}

1、冒泡排序

冒泡排序算法的运作如下:(从后往前)

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

//冒泡排序int main(){int a[10] = {9,8,7,6,5,4,3,2,1,0};int len = sizeof(a) / sizeof(a[0]);int i,j;for(i = 0;i < len - 1;i++ ){for(j = 0;j < len - i - 1;j++){if(a[j] > a[j + 1])swap(a,j,j + 1);}}printfA(a,len);    return 0;}

2、鸡尾酒排序
//鸡尾酒排序int main(){int a[10] = {9,6,1,3,5,8,4,0,2,7};int len = sizeof(a) / sizeof(a[0]);int i;int left = 0;int right = len - 1;while(left < right){for(i = left;i < right;i++){if(a[i] > a[i + 1])swap(a,i,i + 1);}right--;for(i = right;i > left;i--){if(a[i - 1] > a[i])swap(a,i - 1,i);}left++;}printfA(a,len);    return 0;}

3、选择排序

//选择排序int main(){int a[10] = {9,8,7,6,5,4,3,2,1,0};int len = sizeof(a) / sizeof(a[0]);int i,j;for(i = 0;i < len - 1;i++ ){int min = i;for(j = i + 1;j < len;j++){if(a[min] > a[j])min = j;}if(min != i)swap(a,min,i);}printfA(a,len);    return 0;}

4、插入排序

int main(){int a[10] = {9,8,7,6,5,4,3,2,1,0};int len = sizeof(a) / sizeof(a[0]);int i,j;int get;for(i = 1;i < len;i++ ){get = a[i];j = i - 1;while(j >= 0 && a[j] > get){a[j + 1] = a[j];j--;}a[j + 1] = get;}printfA(a,len);    return 0;}

5、插入排序:二分法查找

//插入排序:二分法查找int main(){int a[10] = {9,8,7,6,5,4,3,2,1,0};int len = sizeof(a) / sizeof(a[0]);int i,j,left,right,get,mid;for(i = 1;i < len;i++ ){get = a[i];left = 0;right = i - 1;while(left <= right){mid = (left + right) / 2;if(a[mid] > get)right = mid - 1;elseleft = mid + 1;}for(j = i - 1;j >= left;j--)a[j + 1] = a[j];a[left] = get;}printfA(a,len);    return 0;}

6、希尔排序

//希尔排序int main(){int a[10] = {9,8,7,6,5,4,3,2,1,0};int len = sizeof(a) / sizeof(a[0]);int i,j;int get;int d = len;do{d = d / 3 + 1;for(i = d;i < len;i++ ){get = a[i];j = i - d;while(j >= 0 && a[j] > get){a[j + d] = a[j];j -= d;}a[j + d] = get;}}while(d > 1);printfA(a,len);    return 0;}




原创粉丝点击