1.数组排序-插入排序

2、数组排序-插入排序 项目描述:创建一个 double 类型数组,数组中元素个数由键盘输入,数据由续 盘输入。创建一个插入排序方法,对该数组中的数据进行排序,同时打印输出每 次排序的结果。

<p>#include<iostream></p>

<p>#include<iomanip></p>

<p>using namespace std;</p>

<p>template <class T></p>

<p>class Array</p>

<p>{</p>

<p>       T *set;</p>

<p>       int n;</p>

<p>public:</p>

<p>       Array(T *data, int i){ set = data; n = i; }</p>

<p>       ~Array(){}</p>

<p>       void sort(); // 排序</p>

<p>       int seek(T key); // 查找指定的元素</p>

<p>       T sum(); // 求和</p>

<p>       void disp(); // 显示所有的元素</p>

<p>};</p>

<p>template<class T></p>

<p>void Array<T>::sort()</p>

<p>{</p>

<p>       int i, j;</p>

<p>       T temp;</p>

<p>       for (i = 1; i<n; i++)</p>

<p>       for (j = n - 1; j >= i; j--)</p>

<p>       if (set[j - 1]>set[j])</p>

<p>       {</p>

<p>              temp = set[j - 1]; set[j - 1] = set[j]; set[j] = temp;</p>

<p>       }</p>

<p>}</p>

<p>template <class T></p>

<p>int Array<T>::seek(T key)</p>

<p>{</p>

<p>       int i;</p>

<p>       for (i = 0; i<n; i++)</p>

<p>       if (set[i] == key)</p>

<p>              return i;</p>

<p>       return -1;</p>

<p>}</p>

<p> </p>

<p>template<class T></p>

<p>T Array<T>::sum()</p>

<p>{</p>

<p>       T s = 0; int i;</p>

<p>       for (i = 0; i<n; i++)</p>

<p>              s += set[i];</p>

<p>       return s;</p>

<p>}</p>

<p>template<class T></p>

<p>void Array<T>::disp()</p>

<p>{</p>

<p>       int i;</p>

<p>       for (i = 0; i<n; i++)</p>

<p>              cout << set[i] << " ";</p>

<p>       cout << endl;</p>

<p>}</p>

<p>int main()</p>

<p>{</p>

<p>       int a[] = { 6, 3, 8, 1, 9, 4, 7, 5, 2 };</p>

<p>       double b[] = { 2.3, 6.1, 1.5, 8.4, 6.7, 3.8 };</p>

<p>       Array<int>arr1(a, 9);</p>

<p>       Array<double>arr2(b, 6);</p>

<p>       cout << " arr1:" << endl;</p>

<p>       cout << " 原序列:"; arr1.disp();</p>

<p>       cout << " 8在arr1中的位置:" << arr1.seek(8) << endl;</p>

<p>       arr1.sort();</p>

<p>       cout << " 排序后:"; arr1.disp();</p>

<p>       cout << "arr2:" << endl;</p>

<p>       cout << " 原序列:"; arr2.disp();</p>

<p>       cout << " 8.4在arr2中的位置:" << arr2.seek(8.4) << endl;</p>

<p>       arr2.sort();</p>

<p>       cout << " 排序后:"; arr2.disp();</p>

<p> </p>

<p>       system("pause");</p>

<p>       return 0;</p>

<p>}</p>

  public static void main(String[] args)  {
        System.out.println("请输入数字");
         Scanner s = new Scanner(System.in);
//这里可以自己定义数组  也可以写死
         //int a  = s.nextInt();
        //int [] arr= new int[a];
        int [] arr= new int[10];
        for (int i = 0; i < arr.length; i++) {
            // 把数据按照从0开始的下标存入arr 数组
            arr[i] = s.nextInt();
            // 输出存入的数组
            System.out.println("您输入的数组是: "+arr[i]);
        }
        int temp;
        System.out.println("数组排序前顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }
        //直接插入排序
        //外层循环确定待比较数值
        for (int i=1;i<arr.length;i++) {  //必须i=1,因为开始从第二个数与第一个数进行比较
            temp = arr[i];  //待比较数值
            int j;
            //内层循环为待比较数值确定其最终位置
            for (j = i - 1;j>=0 && arr[j]>temp;j--) {  //待比较数值比前一位置小,应插往前插一位
                //将大于temp的值整体后移一个单位
                arr[j+1] = arr[j];
            }
            arr[j+1] = temp; //待比较数值比前一位置大,最终位置无误
        }
        System.out.println();
        System.out.println("数组排序后顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }
    }