-
插入排序(這個效率還是可以的,一個數組有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);
}
}