编程练习:合并两个数组(包括三种快排程序)

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 /*确定快排1的分界值*/
  5 int partition1(int array[],int r,int m){
  6     int i,j=m,temp,flag1=0,flag2=0;//比较的数是大数时将flag1置1,也就是当遇到大数之后,再次遇到小数才进行前后交换;
  7                                 //flag2为0时,j=i,第一次遇到大数时,把flag2置1;也就是说,j的初始值为参考值的坐标,
  8                                 //当遇到大数时,j的值改变为第一个大数的坐标(j=i),后续j的值的变化仅跟是否发生交换有关
  9     if(r<m){
 10         for(i=r;i<m;i++){
 11             if(array[i]>array[m]){
 12                 flag1=1;
 13                 if(!flag2) {
 14                     j=i;
 15                     flag2=1;
 16                 }
 17             }
 18             else{
 19                 if(flag1){
 20                     temp=array[i];
 21                     array[i]=array[j];
 22                     array[j]=temp;
 23                     j++;
 24                 }
 25             }
 26         }
 27         temp=array[j];
 28         array[j]=array[m];
 29         array[m]=temp;
 30         return j;
 31     }
 32 }
 33 /*快排1,以最后一个数作为参考值*/
 34 void sort1(int array[],int r,int m){
 35     int p;
 36     if(r<m){
 37         p=partition1(array,r,m);
 38         sort1(array,r,p-1);
 39         sort1(array,p+1,m);
 40     }
 41 }
 42 /*确定快排2的分界值*/
 43 int partition2(int array[],int r,int m){
 44     int i,j=m+1,temp,flag1=0,flag2=0;//比较的数是大数时将flag1置1,也就是当遇到大数之后,再次遇到小数才进行前后交换;
 45                                 //flag2为0时,j=i,第一次遇到大数时,把flag2置1;也就是说,j的初始值为参考值的坐标,
 46                                 //当遇到大数时,j的值改变为第一个大数的坐标(j=i),后续j的值的变化仅跟是否发生交换有关
 47     if(r<m){
 48         for(i=r+1;i<=m;i++){
 49             if(array[i]>array[r]){
 50                 flag1=1;
 51                 if(!flag2) {
 52                     j=i;
 53                     flag2=1;
 54                 }
 55             }
 56             else{
 57                 if(flag1){
 58                     temp=array[i];
 59                     array[i]=array[j];
 60                     array[j]=temp;
 61                     j++;
 62                 }
 63             }
 64         }
 65         temp=array[j-1];
 66         array[j-1]=array[r];
 67         array[r]=temp;
 68         return j-1;
 69     }
 70 }
 71 /*快排2*/
 72 void sort2(int array[],int r,int m){
 73     int p;
 74     if(r<m){
 75         p=partition2(array,r,m);
 76         sort2(array,r,p-1);
 77         sort2(array,p+1,m);
 78     }
 79 }
 80
 81 /*快排3*/
 82 void sort3(int array[],int r,int m){
 83     int low=r,high=m,key=array[r];
 84     if(low<high){
 85         while(low<high){
 86         while(low<high&&array[high]>key)
 87             high--;
 88         array[low]=array[high];
 89         while(low<high&&array[low]<key)
 90             low++;
 91         array[high]=array[low];
 92         }
 93         array[low]=key;
 94         sort3(array,r,low-1);
 95         sort3(array,low+1,m);
 96     }
 97 }
 98
 99 int main(int argc, char *argv[]) {
100     int i,j,k,m,n,A[500],B[500],C[1000];
101     scanf("%d",&m);
102     for(i=0;i<m;i++)
103         scanf("%d",&A[i]);
104     scanf("%d",&n);
105     for(j=0;j<n;j++)
106         scanf("%d",&B[j]);
107     i=j=0;
108
109     /*合并两个有序的数组*/
110 //    for(k=0;k<m+n;k++){
111 //        if(i>=m&&j<n){
112 //            C[k]=B[j];
113 //            j++;
114 //        }
115 //        if(j>=n&&i<m){
116 //            C[k]=A[i];
117 //            i++;
118 //        }
119 //        if(i<m&&j<n){
120 //            if(A[i]<B[j]){
121 //                C[k]=A[i];
122 //                i++;
123 //            }
124 //            else{
125 //                C[k]=B[j];
126 //                j++;
127 //            }
128 //        }
129 //    }
130
131     /*合并两个无序的数组*/
132     for(k=0;k<m+n;k++){
133         if(i<m){
134             C[k]=A[i];
135             i++;
136         }
137         else{
138             C[k]=B[j];
139             j++;
140         }
141     }
142     //sort1(C,0,m+n-1);
143     //sort2(C,0,m+n-1);
144     sort3(C,0,m+n-1);
145
146     //打印合并后的有序数组
147     for(k=0;k<m+n;k++)
148         printf("%d ",C[k]);
149     printf("\n");
150     return 0;
151 }
时间: 2024-10-07 23:38:17

编程练习:合并两个数组(包括三种快排程序)的相关文章

javascript合并两个数组

在开发的过程中,我们很多时候会遇到需要将两个数组合并成一个数组的情况出现. var arr1 = [1, 2, 3]; var arr2 = [4, 5, 6]; // 将arr1和arr2合并成为[1, 2, 3, 4, 5, 6] 这里总结一下在JavaScript中合并两个数组的方法. for循环数组 这个方式是最简单的,也是最容易实现的. var arr3 = []; // 遍历arr1 for (var i = 0; i < arr1.length; i++) { arr3.push(

合并两个数组

#include <iostream> using namespace std; int sortedInsert(int A[],int lenA,int B[],int lenB) { if(B == NULL) return lenA; int len = lenA + lenB; int indexNew = len-1; int indexA = lenA-1; int indexB = lenB-1; while( indexA>=0 && indexB>

js如何合并两个数组

js如何合并两个数组:本章节介绍一下如何合并两个数组,希望对大家有所帮助.实例代码:实例一: var arrOne=["蚂蚁部落","青岛市南区",3]; var arrTwo=["分享交流","antzone",600]; console.log(arrOne.concat(arrTwo)); console.log(arrOne); console.log(arrTwo); 由以上代码的输出结果可以看出concat()函数

合并两个数组 - concat()

使用 concat() 方法来合并两个数组. 编辑您的代码: <html> <body> <script type="text/javascript"> var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" var arr2 = new Array(3) arr2[0] = "James

[转]javascript指定事件处理程序包括三种方式:

javascript指定事件处理程序包括三种方式: (1):DOM0级事件处理程序 如: 代码如下: var btn=document.getElementById("mybtn"); //取得该按钮的引用 btn.onclick=function(){ alert('clicked'); alert(this.id); // mybtn 以这种方式添加的事件处理程序会在事件流的冒泡阶段被处理. 删除DOM0级方法指定的事件处理程序: btn.onclick=null; // 删除事件

数组的三种声明方式总结、多维数组的遍历、Arrays类的常用方法总结

1. 数组的三种声明方式 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] test1 = new String[6]; test1[0] = "数组0"; test1[1] = "数组1"; //第二种 例: String[] test2 = {"数组0","数组1","数组2","

数组的三种方式总结、 多维数组的遍历及 Arrays类的常用方法总结

一.数组的三种方式总结 1.创建数组 Java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用 dataType[arraySize] 创建了一个数组. 二.把新创建的数组的引用赋值给变量 arrayRefVar. 数组变量的声明,和创建数组可以用一条语句完成,如下所示: dataType[] arrayRefVar = new dataType[arraySize]; 另外,你还可以使

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

数组的三种定义方式

// 数组的三种定义方式 var arr = ['zhangsan','lisi','wangwu']; var arr1 = new Array('zhangsan','lisi','wangwu'); var arr2 = new Array(3); arr2[0] = 'zhangsan'; //注意:下标一定要写,不像在php中,下标是可以不写,是一直追加 // console.log(arr2); // 说明:js中,没有关联数组一说,数组下标都是数字 // 如果一个数组的下标是自定义