C++归并排序练习
归并排序实质是将一个无序数组拆分成多个数组再分别排序,再通过对比合并成一个有序数组
#include<iostream> #include<ctime> using namespace std; #define number 100 int main() { srand((unsigned int)time(NULL)); int arr[number]; int flag=0; //生成随机数组 for (int i = 0; i < number; i++) { //生成1~10随机数 arr[i]=rand()%number+1; //显示生成的随机数组 cout<<arr[i]<<"\t"; flag++; if ((flag%10) == 0) { cout<<endl; } } int low = 0; //起始低位 int mid=number/2; //中间位 int high=mid; //起始高位 int tmp=0; int j=0; //先使用插入排序前半段 for (int i = 1; i < mid; i++) { tmp = arr[i]; for ( j = i - 1;((j >= 0) && (arr[j] > tmp));j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } //先使用插入排序后半段 for (int i = mid+1; i < number; i++) { tmp = arr[i]; for ( j = i - 1;((j >= mid)&& (arr[j] > tmp));j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } //归并排序 int temp[number]={0}; int k = 0; while (low < mid && high < number) //低位和高位相比较,谁小谁就被拿进temp数组 { if (arr[low] <= arr[high]) { temp[k] = arr[low]; k++; low++; } else { temp[k] = arr[high]; k++; high++; } } //将剩下的有序的数据存入tmp数组中 while (low < mid) { temp[k] = arr[low]; k++; low++; } while (high < number) { temp[k] = arr[high]; k++; high++; } //将tmp数组中的元素拷贝到原数组中 k = 0; int i = 0; while (i < number) { arr[i] = temp[k]; i++; k++; } //显示有序的数组 cout<<"-----------------------"<<endl; for (int i = 0; i < number; i++) { cout<<arr[i]<<"\t"; flag++; if ((flag%10) == 0) { cout<<endl; } } return 0; }