-
插入排序(这个效率还是可以的,一个数组有8万个元素,排序大约6秒)
// 插入排序
// 思路 : 就是将n个排序的元素看成是一个有序和无序的列表,开始的时候有序的列表只包含一个元素,无序列表中包含n-1个元素,排序的的过程每次从无序的列表中取出第一个元素,吧他的排序码与有序列表的排序码进行比较,将他插入到有序列表中的适当位置,使他成为有序的列表。
void chaRuPaiXu() {int a[10]={1,5,9,8,7,6,3,5,8,4};
for (int i =1;i<10 ;i++){
// 保存当前的的array【i】的值;
int insertVal = a[i];
// 拿到当前值的前一个index
int index = i-1;
// 判断循环的条件
while (index>=0&&insertVal >a[index]) {
// 将arr【index】向后移动
a[index+1]=a[index];
// 让index 向前移动
index--;
}
// 如果没有进入循环,就不交换位置
a[index+1]=insertVal;
}
for (int j=0 ; j<10; j++) {
NSLog(@"%d",a[j]);
}
}
// 快速排序 核心思想就是递归
void sort (int left ,int right, int array[]){
int l = left;
int r= right;
int pivot = (int)array[(left+right)/2];
int temp =0;
while (l<r) {
while (array[l]<pivot) l++;
while (array[r]>pivot) r--;
if (l>=r) break;
temp = array[l];
array[l]=array[r];
array[r]= temp;
if (array[l]==pivot) --r;
if (array[r]==pivot) ++l;
if (l==r) {
l++;
r--;
}
if (left<r) sort(left,r,array);
if (right>1) sort(1,right,array);
}
}