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+" ");
}
}